空指针不会在cpp中寻址到0x0位置

时间:2017-09-26 06:00:42

标签: c++ pointers null

我想通过if条件评估指针是否为null:

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

但这不起作用,Strangly模型指针而不是指向0x0位置它指向0xcdcdcdcdcdcdcdcdcd内存位置然后model==nullptr不起作用,我也做{{1 }},if(model)这些也无效!

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

4 个答案:

答案 0 :(得分:7)

未初始化的指针不需要指向<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@color/button_pressed"/> <item android:state_focused="true" android:drawable="@color/button_focused"/> <item android:drawable="@color/button_default"/> </selector> 。它可以指向任何地方。

答案 1 :(得分:1)

此代码调用未定义行为,因为您的指针是未初始化

你需要初始化指向nullptr的指针,然后检查它,否则,它的值是垃圾(它可以是任何东西)。

PS:空指针必须等于表达式0x0

答案 2 :(得分:0)

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

现在,我不清楚为什么在声明之后立即将指针与NULL进行比较,但在指针被赋予函数或某个表达式返回的值之后,这种比较是有意义的:

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

答案 3 :(得分:-3)

如果您使用Visual Studio,则使用哪个IDE,它会像这样使用NULL

但这是解决方案

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