调试器在 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."
您可能需要检查它是否在不同的编译器上。
在运行时,我在执行此代码时收到 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." 您可能需要检查它是否在不同的编译器上。