以下代码段是否在if语句中编译/执行块?
int* pointer = NULL;
int deref = *pointer;
if(deref == NULL){
// will execute?
}
由于pointer
变量包含NULL,否则此指针变量的取消引用也会返回NULL,否则会导致运行时错误?
答案 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的事实。