Tag: 标准 遵从性

是否允许编译器回收释放的指针变量?

有人声称 编译器可以自由地将指针变量重用于其他目的之后 realloc 被释放 ,所以你不能保证它具有与之前相同的价值 即 void *p = malloc(42); uintptr_t address = (uintptr_t)p; free(p); // […] stuff unrelated to p or address assert((uintptr_t)p == address); 可能会失败。 C11附件J.2读 使用指向通过调用free或realloc函数释放的空间的指针的值(7.22.3)[ 未定义 ] 但附件当然不是规范性的。 附件L.3(规范性的,但可选的)告诉我们,如果 引用通过调用free或realloc函数释放的空间的指针值(7.22.3)。 结果被允许是关键的未定义行为。 这证实了这一说法,但我希望从标准本身而不是附件中看到适当的引用。