我的程序中出现了分段错误,gdb告诉我它在这个函数的行上
parent->getChildren().push_back(temp);
在
void Tree::add(Position& value, Node*& parent) {
Node* temp = new Node(value, parent);
parent->getChildren().push_back(temp);
}
我在该行之前添加了cout语句,并且在调用该函数时一切似乎都有效。但我不认为我的载体可能无效?矢量声明在这里 -
std::vector<Node*> children;
使用getChildren()只返回std :: vector&amp;。任何帮助表示赞赏。
节点构造函数:
Tree::Node::Node(Position& v, Node*& p)
: value(v), parent(p), gvalue(0), hvalue(0), fvalue(0) {}
答案 0 :(得分:1)
这不是“元素问题”,因为你只是push_back(Node*)
。那不能失败。
所以我看到2个可能的“矢量问题”:
parent->
因为parent
未分配。getChildren().
的问题,因为它返回对不存在的向量的引用。尝试检查它们。
答案 1 :(得分:0)
添加以下行:
void Tree::add(Position& value, Node*& parent)
{
if (parent == NULL)
{
std::err << "Error Null parent. Aborting\n";
exit(1);
}
Node* temp = new Node(value, parent);
parent->getChildren().push_back(temp);
}