在C中使用合法的无效指针值?

时间:2010-11-02 09:59:39

标签: c++ c pointers

以下代码为undefined behavior in C++(尽管它几乎可以在任何广泛使用的实现中正常工作):

int* pointer; //uninitialized - likely illegal pointer value
pointer++; //incrementing an illegal pointer is UB

上述代码在C中是否合法?

3 个答案:

答案 0 :(得分:8)

它在C中也是未定义的行为,因为在某些体系结构中,将无效指针加载到寄存器会触发硬件故障。

请参阅Is storing an invalid pointer automatically undefined behavior?

答案 1 :(得分:1)

在C99中是未定义的行为。 pointer的值是“不确定”(6.7.8.10),不确定值可以是在使用时导致不确定性的陷阱值。

答案 2 :(得分:1)

不合法。像这样的代码将编译,但有警告。不要忽视它们。不要写这样的代码。它会以许多不太好的方式影响您的系统。我的大学老师曾告诉我们,他设法使用未定义行为的代码擦除了一台机器的BIOS。