在运行时,我正在执行此代码时遇到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; }
};
答案 0 :(得分:2)
您可以直接访问Tree::Insert
成员(即不通过Tree
类的实例,就像它是静态成员一样)或Tree
类的实例用于访问Insert
方法的用户未初始化。
换句话说,this
为空。
答案 1 :(得分:-2)
nullptr是特定于实现的。当你说, “之前我的编码完全相同,但它从未引发异常。” 您可能必须检查它是否在不同的编译器上。