我什么时候可以检查指针的值

时间:2014-03-18 06:39:06

标签: c

好的,最近我对这种情况感到惊讶: Evaluating the condition containing unitialized pointer - UB, but can it crash?

似乎是这样:

int *p;
if(p != NULL)
{
  int k;
}

理论上已经崩溃了。

我的问题是:何时检查指针的值是否安全? 什么时候检查安全: if(ptr == SomeValue) - 这样它不会触发UB?

1 个答案:

答案 0 :(得分:6)

检查初始化自动变量的值是唯一安全的。指针也不例外。

这在C.11中的§6.3.2.1¶2中详细说明:

  

除非它是sizeof运算符的操作数,一元&运算符,++   运算符,--运算符或.运算符的左操作数或赋值运算符,没有数组类型的左值将转换为存储在指定对象中的值(不再是一个左值);这称为左值转换。 ...如果左值指定了一个自动存储持续时间的对象,该对象可以使用寄存器存储类声明(从未使用过地址),并且该对象未初始化(未使用初始化程序声明在使用之前没有对其进行任何分配),行为未定义