Исключение отладчика nullptr во время проверки nullptr
Во время выполнения я получаю исключение nullptr во время выполнения этого кода.
bool Tree::Insert(int n)
{
if (root == nullptr) // This is where it throws
{
Node* root = new Node(n);
return true;
}
Инициализация в Tree.h
private:
Node* root;
и конструктор деревьев.
Tree::Tree()
{
root = nullptr;
}
Я кодировал в точности так, как это раньше, и это никогда не бросало исключения.
ОБНОВЛЕНИЕ: Я прошу прощения за путаницу в дополнительном Tree}:Insert(). Там больше кода, и у всех есть обратный регистр. У меня было это раньше
Node* newNode = new Node(n);
root = newNode;
но изменил это по другой причине.
node.h
#pragma once
struct Node
{
int data;
Node *left;
Node *right;
// Constructor
Node() { data = 0; left = nullptr; right = nullptr; }
// Parameterized
Node(int d) { data = d; left = nullptr; right = nullptr; }
// Destructor
~Node() { data = 0; }
};
2 ответа
Вы либо получаете доступ к Tree::Insert
член напрямую (т.е. не через экземпляр Tree
класс, как если бы это был статический член) или экземпляр Tree
класс, который вы используете для доступа к Insert
метод не инициализирован.
Другими словами, this
нулевой.
nullptr зависит от реализации. когда вы говорите: "Я кодировал в точности так, как это раньше, и это никогда не бросало исключение". Возможно, вам придется проверить, был ли он на другом компиляторе.