Вектор или элемент, вызывающий 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 возможных "векторных проблемы":
- Проблема с
parent->
так какparent
не выделяется. - Проблема с
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);
}