调试器在 nullptr 检查期间抛出 nullptr 异常

Debugger Throwing nullptr Exception During nullptr Check

在运行时,我在执行此代码时收到 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::Tree()
{
    root = nullptr;
}

我以前的代码完全像这样,它从来没有抛出过异常。

更新: 对于额外的 '}' Tree::Insert() 造成的混淆,我深表歉意。那里有更多代码,它们都有一个 return 案例。我以前有过这个

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

您可以直接访问 Tree::Insert 成员(即不通过 Tree class 的实例,就好像它是静态成员一样)或 Tree class 您用来访问的 Insert 方法未初始化。

换句话说,this为空。

nullptr 是特定于实现的。当你说, "I have coded exactly like this before and it never threw an exception." 您可能需要检查它是否在不同的编译器上。