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 回答