c - 在 C 中初始化地址为零的变量

标签 c windows pointers null zero

这可能是一个非常基本的问题。我知道有一个 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/

相关文章:

将 struct 字段转换为 unsigned char 字符串

c - 在c中更新/覆盖文件而不创建新文件或临时文件

c - 指针的地址和指针包含的地址之间的区别

c - 内存分配和释放

windows - 访问被拒绝。无法开启服务 'Tomcat5'

c++ - '*' token 模板化链表之前的预期构造函数、析构函数或类型转换

C 段错误(核心转储)

c - Sem_wait() 在第一个 true 条件后不阻塞

c - Google 环聊桌面应用流程

c++ - 如何从另一个 C++ .exe 打开一个 .exe?