1

私は a を持っていて、where is of typeとis of typemap<key_t, struct tr_n_t*> nodeTableを実行しようとしています。nodeTable[a] = someNodeatypedef long key_tsomeNodeo_t*

stl_function.h の実行中の次の時点で、セグメンテーション違反が発生します。

  /// One of the @link comparison_functors comparison functors@endlink.
  template<typename _Tp>
    struct less : public binary_function<_Tp, _Tp, bool>
    {
      bool
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x < __y; }
    };

ソースコード:

#include <stdio.h>
#include <stdlib.h>
#include <map>

using namespace std;

typedef long key_t;

typedef struct tr_n_t {
    key_t key;
    map<key_t, struct tr_n_t *> nodeTable;
} o_t;

int main() {
    o_t *o = (o_t *) malloc(sizeof(o_t));
    o->nodeTable[1] = o;
    return 0;
}

私は地図を正しく使用していませんか?

4

3 に答える 3

1

問題は、malloc を使用して o を初期化するため、メモリは割り当てられますが、コンストラクターが呼び出されないことです。

の代わりにo_t *o = new o_t();使用すると、マップのコンストラクターが呼び出されるため、に変更します。newmalloc

于 2012-11-10T11:38:28.733 に答える
0

にスペースを割り当ててo_tいますが、メモリを初期化していません。代わりにこれを試してください:

#include <map>

typedef long key_t;

struct o_t {
    key_t key;
    std::map<key_t, o_t*> nodeTable;
};

int main() {
    o_t o;
    o.nodeTable[1] = &o;
    return 0;
}
于 2012-11-10T11:38:04.707 に答える
0

C スタイルmallocを使用して、C++ クラスを含む構造体を割り当てています。のコンストラクターstd::mapが呼び出されないため、オブジェクトは無効です。プレーンな構造体では malloc を使用できませんが、動作するために正しい初期化が必要なオブジェクトでは使用できません。

割り当てを変更してみてください

o_t *o = new o_t();
于 2012-11-10T11:38:27.187 に答える