我有一个在 x86 平台上运行良好的进程。
现在我将它编译为 x64,突然我不能为我的指针分配 NULL。
如果我这样做:
void* pointy = NULL;
它将指向 0x0000000100000000
怎么回事?
最佳答案
Null 不一定是按位零。它的值是实现定义的。
也就是说,这些都是一样的:
void* pointy = NULL;
void* pointy = 0;
void* pointy = nullptr;
他们将一个空指针值分配给pointy
。这个值在位级别上是什么是完全未指定的,并且不一定是所有位都为零!
如果您的代码如您所说,那么要么:您的平台确实将该值用作 null,但它没有使用并且您的编译器已损坏,或者它没有使用并且您读取的值不正确。
在任何情况下,C++ 代码都可以,并将 pointy
设置为 null。无需担心任何进一步的事情。
关于c++ - 将 NULL 分配给 x64 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9877648/