C++ 为什么';这个循环不能检测空指针吗?

C++ 为什么';这个循环不能检测空指针吗?,c++,null,nullpointerexception,C++,Null,Nullpointerexception,这是我的代码: while(node) { cout<<node->getDiameter(); node=node->stepAbove(); } 但是while循环会导致访问冲突,因为该循环没有检测到空指针。调试时,它指向一个没有定义的地址“0xCCCC”。。。有什么建议吗 编辑:忘记发布我的构造函数是: Node(int x=0) { this->above=nullptr; this->r=x; } 在构造函数中,将

这是我的代码:

while(node) {
    cout<<node->getDiameter();
    node=node->stepAbove();
}
但是while循环会导致访问冲突,因为该循环没有检测到空指针。调试时,它指向一个没有定义的地址“0xCCCC”。。。有什么建议吗

编辑:忘记发布我的构造函数是:

Node(int x=0) {
    this->above=nullptr;
    this->r=x;
}

在构造函数中,将未由构造函数参数初始化的字段设置为NULL,例如:

Node::Node(float radius) 
{
    above = NULL;
    r = radius;
}

在构造函数中,将未由构造函数参数初始化的字段设置为NULL,例如:

Node::Node(float radius) 
{
    above = NULL;
    r = radius;
}

未初始化的
指针与C中的
null
指针之间存在差异++

struct node
{

};

int main()
{
    node *n1 = 0;
    node *n2;

    if(!n1)
        std::cout << "n1 points to the NULL";

    if(!n2)
        std::cout << "n2 points to the NULL";
}
struct节点
{
};
int main()
{
节点*n1=0;
节点*n2;
如果(!n1)

std::cout未初始化的
指针与C中的
null
指针之间存在差异++

struct node
{

};

int main()
{
    node *n1 = 0;
    node *n2;

    if(!n1)
        std::cout << "n1 points to the NULL";

    if(!n2)
        std::cout << "n2 points to the NULL";
}
struct节点
{
};
int main()
{
节点*n1=0;
节点*n2;
如果(!n1)

std::难道听起来你实际上没有空指针吗?它不是空的,它是未初始化的。很可能是在
this->上面的
行。这让我很困惑。为什么它没有指向空,因为它从来没有初始化过?我会调查列表。第一个问题是:当代码进入while时,节点是否指向有效元素循环?然后:列表的格式是否正确?可能,列表的结尾不是由空值表示的,而是由未初始化的变量表示的。请确保在构造函数中将上面的值设置为空。
null
只是一个宏
#define null 0
。因此我们的解决方案实际上是完全相同的。听起来您实际上并没有使用空值有一个空指针…它不是空的,它是未初始化的。很可能是在上面的
this->
行。这让我很困惑。为什么它没有指向空,因为它从未初始化过?我会调查列表。第一个问题是:当代码进入while循环时,节点是否指向有效元素?然后:列表的格式是否正确?可能,列表的结尾不是由空值表示的,而是由未初始化的变量表示的。请确保在构造函数中将上面的设置为空。
null
只是一个宏
#define null 0
。因此,我们的解决方案实际上完全相同。幸运的是,如果您这样做,大多数编译器都会发出警告。因此,还有一个原因是不忽略任何编译器警告;-)很遗憾,如果您这样做,大多数编译器都会发出警告。因此,还有一个不忽略任何编译器警告的原因;-)