c++ - 将 NULL 分配给 x64 指针

标签 c++ windows 64-bit

我有一个在 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/

相关文章:

windows - 无法在Windows 8上切换Docker OS

c++ - 如何防止Windows显示 "Debug Error! abort() has been called"对话框?

windows - 克隆 Anaconda 基础环境时出现断言错误

sharepoint - 32 位进程不支持 Microsoft SharePoint。请验证您是否在 64 位可执行文件中运行

c++ - 在 Linux-64 上编译 NeHe(或其他面向 32 位的)示例

c++ - 当使用 malloc 而不是 new 时,类成员会发生什么情况?

c# - Delphi 编写的 DLL 发生内存访问冲突。尝试通过 DLLImport 访问

c++ - 为什么 str != "hello"&& "goodbye"不起作用?

r - 在 R 中,检测操作系统是否为 64 位的规范方法是什么?

c++ - 移动 QMainWindow 不会影响子窗口部件的绘制位置