在 Class.h
Struct Node
{
int ID;
int position;
}
在 Class.cpp 类中,我正在初始化导致核心转储错误的结构向量
Class::Class(const branch& branches):mybranches(branches)
{
for (const auto & branch:mybranches)
{
Node* node
node->ID= branch->ID
node->position= branch->position
mynodesvector.push_back(std::move(node));
}
}
但是像这样初始化它不会导致错误
Class::Class(const branch& branches):mybranches(branches)
{
for (const auto & branch:mybranches)
{
Node node
node.ID= branch->ID
node.position= branch->position
mynodesvector.push_back(&node);
}
}
我想知道核心转储错误的原因是什么,将其初始化为指向结构的指针。
您不创建/分配node*
应指向的对象;所以取消引用node
会导致未定义的行为;
Node* node;
node->ID= branch->ID; // UB here...
但是,分配一个对象,如
Node* node = new Node();
node->ID= branch->ID;
...
应该管用。
在您的第二个示例中,您定义了一个Node
-object(而不仅仅是指向它的指针)。所以至少访问其成员是保存。
Node node; // defines a Node-object.
node.ID= branch->ID; //save
node.position= branch->position; // save
但是请注意,您 push_back 一个指向具有块作用域的对象的指针;当您稍后取消引用此指针时,实际对象将超出范围,然后您会得到未定义的行为。
mynodesvector.push_back(&node);
我建议看看std::shared_ptr<Node>
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句