Вектор или элемент, вызывающий segfault?

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

Решение

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

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

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

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

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

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);
}
Другие вопросы по тегам