【发布时间】:2014-02-01 23:46:28
【问题描述】:
有时内存地址 0x0 处的数据非常有价值——以 x86 实模式 IVT 为例:它从 0x0 开始并包含指向中断处理程序的指针:0x00 处的 dword 是指向除以零错误处理程序的指针。
但是,C11 语言标准禁止取消引用空指针[WG14 N15706.5.3.2],这些空指针定义为用0 初始化的指针或用空指针[WG14 N15706.3.2.3] 初始化的指针,有效地禁止了第一个字节。
人们如何在需要时实际使用 0x0?
【问题讨论】:
-
你指的是C++11吗?该标准明确指出 nullptr 根本不是整数。 IE nullptr != 0x0.
-
能否请您参考 C11 规范的相关部分?
-
@GreenAsJade 不,这里不是 C++,只是普通 C。
-
空指针是从
(void *)0等表达式中得到的指针,但它不一定与指向地址零的指针相同。 -
@alvits 在实模式(16 位模式)下,没有。实模式下没有用户空间和内核空间的分离。
标签: c pointers memory dereference