我有一个结构如下:
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。
在创建空向量时发生访问冲突。有没有办法在构造函数中初始化向量,以便不会发生错误?
答案 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?
}
};