为什么这个循环没有检测到空指针?

时间:2013-10-27 10:09:53

标签: c++ null nullpointerexception

所以这是我的代码:

while(node) {
    cout<<node->getDiameter();
    node=node->stepAbove();
}

这些是方法:

Node* Node::stepAbove() {
    return this->above;
}
int Node::getDiameter() {
    return this->r;
}

但是while循环导致访问冲突,因为循环没有检测到空指针。在调试时,它指向一个没有定义的地址“0xcccccccc”...问题出在哪里?

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

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

2 个答案:

答案 0 :(得分:3)

uninitialized 指针与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";
}

尝试运行此代码,您将看到 n2指向NULL 将不会被打印。你想知道为什么?这是因为n1已明确指向 null ,但我对n2的处理方式并不相同。 С++标准没有指定未初始化指针应该保存的地址。在那里,0xcccccccc似乎是您的编译器选择为调试模式的默认地址。

答案 1 :(得分:1)

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

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