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

时间:2017-03-17 08:39:37

标签: c++ pointers if-statement null-pointer

在运行时,我正在执行此代码时遇到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 个答案:

答案 0 :(得分:2)

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

换句话说,this为空。

答案 1 :(得分:-2)

nullptr是特定于实现的。当你说, “之前我的编码完全相同,但它从未引发异常。” 您可能必须检查它是否在不同的编译器上。