这可能是一个非常基本的问题。我知道有一个 C 约定将空指针的值设置为零。您是否有可能在 Windows 中为新变量分配空间,而分配空间的地址恰好为零?如果不是,通常占用该地址区域的是什么?
最佳答案
在 MS-DOS 上,空指针是一个相当有效的指针,并且由于操作系统在 real mode 中运行实际上有可能用垃圾覆盖 0x0 地址并破坏内核。你可以这样做:
int i;
unsigned char* ptr = (unsigned char *)0x0;
for(i = 0; i < 1024; i++)
ptr[i] = 0x0;
现代操作系统(例如 Linux、Windows)在 protected mode 中运行它永远不会让您直接访问物理内存。
处理器将map the physical addresses to virtual addresses你的程序将使用。
它还会跟踪您访问的内容,如果您敢触摸不属于您的东西,您会遇到麻烦(您的程序会 segfault )。这绝对包括尝试取消引用 0x0 地址。
关于c - 在 C 中初始化地址为零的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17462299/