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
。因此,我们的解决方案实际上完全相同。幸运的是,如果您这样做,大多数编译器都会发出警告。因此,还有一个原因是不忽略任何编译器警告;-)很遗憾,如果您这样做,大多数编译器都会发出警告。因此,还有一个不忽略任何编译器警告的原因;-)