向量构造函数添加向量初始化

时间:2013-01-24 15:49:07

标签: c++ struct

我有一个结构如下:

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。

在创建空向量时发生访问冲突。有没有办法在构造函数中初始化向量,以便不会发生错误?

3 个答案:

答案 0 :(得分:3)

以下

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

您正在将未初始化的指针传递给memset()。你的意思是说:

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

或者,非常简单

  parent = NULL; // or nullptr

答案 1 :(得分:2)

此行导致使用未初始化的指针:

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

您应该将其设置为NULL而不是:

parent = NULL;

(或者更好的是,在初始化列表中这样做:)

octNode() : parent(NULL)
{ 
      memset(child,0,sizeof(child));
}

答案 2 :(得分: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?
    }
};