【发布时间】:2016-08-24 05:44:57
【问题描述】:
使用指针写入常量变量会导致运行时错误。
const int i;
int *p;
void main()
{
p = (int*)&i;
*p = 10; // Causes runtime error
}
但在 Windows 系统中,一切都是从 RAM 本身运行的。
当我打印const变量和普通变量的地址时,我可以看到它们在不同的偏移量中。
系统如何知道指针所访问的地址是const 1?
【问题讨论】:
-
链接器已将全局变量
i放在可执行映像的 RO 部分中。 -
*p = 10 个未定义的行为。