2017-09-26 26 views
0

我要评估指针为空或不是由if条件象下面这样:空指针没有解决为0x0位置CPP

Model * model; 
if(model == nullptr){ 
    //do something... 
} 

但是,这并不工作,Strangly模型指针,而不是指向0x0的位置它指向0xcdcdcdcdcdcdcdcd内存位置然后model==nullptr不起作用,我也做了if(model),if(model== NULL)这些也都不起作用!

有关这个问题的任何想法?

+2

请停止发送无关标签。 ** [tag:C] **中没有'nullptr'。 –

回答

7

未初始化的指针不需要指向NULL。它可以指向任何地方。

+1

空指针必须与表达式'0x0' –

+0

@ M.M相比较,这是真的,但为此,您需要在某个时刻将指针设置为'nullptr'。在此之前它是未初始化的,其内容由实现确定 –

-3

哪一个IDE你正在使用,如果你正在使用Visual Studio它使用NULL这样

但这里是解决方案

Model * model=NULL; 
if(model == NULL){ 
    //do something... 
} 
+0

尽管支持最新的C++标准版本的速度很慢,但MSVC中支持'nullptr'已经有相当长的一段时间了。自从他们开始支持C++ 11以来。 – StoryTeller

+0

它不是IDE,但支持C++ 11的编译器 – user463035818

1

此代码调用未定义行为,因为你的指针是初始化!您需要初始化您的指针nullptr,然后检查它,否则,它的值是垃圾(可以是任何东西)。

PS:空指针必须与表达式0x0相比较。

0

指针Model * model;将取任何随机垃圾值,具体取决于指针分配的内存位置。 C/C++标准并不要求已声明但未初始化的指针自动初始化为NULL(或任何默认值)。

现在,我真的不明白为什么指针声明后立即相比,NULL,但指针被分配函数或一些表达式返回一个值之后比较有道理:

Model * model = some_func(/* .. */); // This would be 
if (model == NULL) {     // a valid usage 
}