我想通过if条件评估指针是否为null:
Model * model;
if(model == nullptr){
//do something...
}
但这不起作用,Strangly模型指针而不是指向0x0
位置它指向0xcdcdcdcdcdcdcdcdcd内存位置然后model==nullptr
不起作用,我也做{{1 }},if(model)
这些也无效!
关于这个问题的任何想法?
答案 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...
}