NULL指针的取消引用是否也等于NULL?

时间:2016-09-21 05:17:33

标签: c++ pointers null dereference

以下代码段是否在if语句中编译/执行块?

int* pointer = NULL;
int deref = *pointer;
if(deref == NULL){
  // will execute?
}

由于pointer变量包含NULL,否则此指针变量的取消引用也会返回NULL,否则会导致运行时错误?

3 个答案:

答案 0 :(得分:3)

结果是“未定义的行为”,它可能会或可能不会触发运行时错误,并且在任何情况下都应该始终避免。

答案 1 :(得分:2)

设置完毕后:

int* pointer = NULL;

指针指向什么都没有。现在你写这个:

int deref = *pointer;

deref将尝试访问指向的指针,这将导致未定义的行为,如分段错误。

我希望这可以解释。

答案 2 :(得分:1)

目前的答案很好地解决了UB。但是,我想添加一些东西。如果您运行此代码:

if(0==NULL){
    std::cout << "True";
}

它将打印True。因此,如果在特定环境中取消引用空指针导致返回0(这不是一个稳定的情况。它是UB),if语句中的部分将执行。

我只想澄清为什么它在某些机器上工作。但是,这并没有改变它是UB的事实。