Исключение отладчика 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 зависит от реализации. когда вы говорите: "Я кодировал в точности так, как это раньше, и это никогда не бросало исключение". Возможно, вам придется проверить, был ли он на другом компиляторе.

Другие вопросы по тегам