空指针不指向 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 位置的主要内容,如果未能解决你的问题,请参考以下文章