以下代码为undefined behavior in C++(尽管它几乎可以在任何广泛使用的实现中正常工作):
int* pointer; //uninitialized - likely illegal pointer value
pointer++; //incrementing an illegal pointer is UB
上述代码在C中是否合法?
答案 0 :(得分:8)
它在C中也是未定义的行为,因为在某些体系结构中,将无效指针加载到寄存器会触发硬件故障。
请参阅Is storing an invalid pointer automatically undefined behavior?
答案 1 :(得分:1)
在C99中是未定义的行为。 pointer
的值是“不确定”(6.7.8.10),不确定值可以是在使用时导致不确定性的陷阱值。
答案 2 :(得分:1)
不合法。像这样的代码将编译,但有警告。不要忽视它们。不要写这样的代码。它会以许多不太好的方式影响您的系统。我的大学老师曾告诉我们,他设法使用未定义行为的代码擦除了一台机器的BIOS。