空指针不指向 cpp 中的 0x0 位置

Posted

技术标签:

【中文标题】空指针不指向 cpp 中的 0x0 位置【英文标题】:null pointer doesn't address to 0x0 location in cpp 【发布时间】:2017-09-26 06:00:41 【问题描述】:

我想通过如下 if 条件来评估指针是否为空:

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

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

对这个问题有什么想法吗?

【问题讨论】:

请停止向不相关的标签发送垃圾邮件。 c 中没有nullptr 【参考方案1】:

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

【讨论】:

@M.M 确实如此,但为此您需要在某个时候将指针设置为nullptr。在那之前它是未初始化的,其内容由实现决定【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:

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

但这里是解决方案

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

【讨论】:

尽管正确支持最新的 C++ 标准版本相当缓慢,但 MSVC 支持 nullptr 已经有一段时间了。自从他们开始支持 C++11 以来。 不是IDE,而是编译器是否支持C++11

以上是关于空指针不指向 cpp 中的 0x0 位置的主要内容,如果未能解决你的问题,请参考以下文章

Java中的空指针问题。

C语言中 内存消亡 指向她的指针就一定消亡或成了空指针为啥是错的啊

野指针空指针

C++中关于返回空指针问题

空指针指向 addView

关于野指针空指针