Вектор или элемент, вызывающий segfault? - PullRequest
1 голос
/ 28 июня 2011

Я получаю ошибку сегментации в моей программе, и 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 &. Любая помощь приветствуется.

Конструктор узла:

Tree::Node::Node(Position& v, Node*& p)
    : value(v), parent(p), gvalue(0), hvalue(0), fvalue(0) {} 

Ответы [ 2 ]

1 голос
/ 28 июня 2011

Это не может быть "проблемой элемента", потому что вы просто push_back(Node*).Это не может не сработать.

Итак, я вижу 2 возможных "векторных проблемы":

  1. Проблема с parent->, поскольку parent не выделено.
  2. Проблема с getChildren()., поскольку она возвращает ссылку на несуществующий вектор.

Попробуйте проверить оба из них.

0 голосов
/ 28 июня 2011

Добавьте строку:

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);
}
...