3

私は次のような構造体を持っています:

struct octNode{
octNode* parent;
octNode* child[8];
std::vector<int> pointIndex;
//constructor of the struct
octNode()
{ 
      memset(parent,0,sizeof(parent));
      memset(child,0,sizeof(child));
}
};

しかし、これは実行時エラーをスローします:0xC0000005:アクセス違反の書き込み場所0xcdcdcdcd。Octree_octnode_0113.exeの0x771115deで未処理の例外:0xC0000005:アクセス違反の書き込み場所0xcdcdcdcd。

空のベクターの作成時にアクセス違反が発生します。エラーが発生しないようにコンストラクターでベクトルを初期化する方法はありますか?

4

3 に答える 3

3

以下では

  memset(parent,0,sizeof(parent));

初期化されていないポインタをに渡しますmemset()。あなたは言うつもりでした:

  memset(&parent, 0, sizeof(parent));

または、非常に単純に

  parent = NULL; // or nullptr

于 2013-01-24T15:50:41.123 に答える
2

この行により、初期化されていないポインタが使用されます。

memset(parent,0,sizeof(parent));

NULL代わりに次のように設定する必要があります。

parent = NULL;

(またはさらに良いことに、初期化リストでそうしてください:)

octNode() : parent(NULL)
{ 
      memset(child,0,sizeof(child));
}
于 2013-01-24T15:53:37.733 に答える
0

コードは次のように言う必要があります:

struct octNode{
    octNode* parent;
    octNode* child[8];
    std::vector<int> pointIndex;
    //constructor of the struct
    octNode()
    : parent(NULL) // maybe nullptr ?
    , pointIndex()
    { 
        std::fill_n(child, 8, NULL); // nullptr?
    }
};
于 2013-01-24T16:03:16.467 に答える