导致段错误的矢量或元素?

时间:2011-06-28 03:45:58

标签: c++ vector initialization segmentation-fault

我的程序中出现了分段错误,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) {} 

2 个答案:

答案 0 :(得分:1)

这不是“元素问题”,因为你只是push_back(Node*)。那不能失败。

所以我看到2个可能的“矢量问题”:

  1. 问题parent->因为parent未分配。
  2. getChildren().的问题,因为它返回对不存在的向量的引用。
  3. 尝试检查它们。

答案 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);
}