【发布时间】:2011-10-11 05:14:04
【问题描述】:
根据 ISO C++,取消引用空指针是未定义的行为。我的好奇心是,为什么?为什么标准决定声明它未定义的行为?这个决定背后的理由是什么?编译器依赖?似乎不是,因为据我所知,根据 C99 标准,它是明确定义的。机器依赖?有什么想法吗?
【问题讨论】:
-
信不信由你,地址 0 在 x86 上是可用的,所以有时,您实际上可能需要取消引用“空”指针。
-
但如果不是未定义,那么行为应该是什么?
-
@drb: nasal demons 例如...
-
@Rob:这不是真的。 6.5.3.2/4 说“如果已为指针分配了无效值,则一元 * 运算符的行为是未定义的。”,脚注包括“一元 * 运算符取消引用指针的无效值包括一个空指针”。
-
空指针不一定指向地址0。
标签: c++ pointers undefined-behavior