【发布时间】:2013-06-12 08:43:19
【问题描述】:
#include <iostream>
int main()
{
int* i = 0;
int x = (*i);
std::cout << x;
}
当我使用Visual Studio 2010 编译和运行上面的程序时,它会崩溃,我知道它会崩溃,因为我将指针设置为 0。
我想知道的是,访问标准中定义的 C++ 中的 null pointer 还是未定义,我只是幸运地因为我的编译器/计算机/操作系统而崩溃了我的程序
如果已定义,当我尝试访问空指针时,C++ 向我保证什么?
【问题讨论】:
-
@R.MartinhoFernandes 所以我可以预计在某些计算机上这不会崩溃?
-
是的,但您也可以期望它在其他人上格式化您的硬盘
-
@Caesar:正确。在没有内存保护方案的原始架构上,空指针通常指向地址 0,通常是可读的。
-
在 DeathStation 9000 上,它实现了一个完全符合标准的 C++ 编译器,解除对 NULL 指针的引用会将小猫发射到太空中。
-
@KazDragon 虽然有时它会将空间投射到小猫身上。