【发布时间】:2013-05-30 05:54:53
【问题描述】:
我最近看到一篇文章提到,C/C++ 中的空指针实际上不仅仅是零,而是被编译器解释为平台的任何分配地址为空。
https://stackoverflow.com/a/2760172/2027262
这与我在 Visual Studio 中调试 c++ 时看到的情况有关,其中指针的值是 0xCACACACA(或类似的东西),而它是一个坏指针(但这可能只是为了我们的利益而显示的值)。
长话短说,平台(例如 windows)的真实空指针地址是什么?还是我完全误解了答案?
编辑:
另外,(只是作为扩展)这是做什么的?
int i = 0;
// pretend to do some stuff with i
char* = (char*)i;
编译器会在运行时将指针设置为 null 还是将其设置为零?如果是后者,那是UB吗?它会破坏程序吗?
【问题讨论】:
-
您在寻找什么样的答案?一份清单?
-
您说 NULL 实际上取决于实现是正确的。检查 C++ 的
和 C 的 。但在 c/c++ 模型中,您可以认为 NULL 为 0。 -
@Niko 不是完整列表,而是一些参考资料。