试图访问空指针
Attempting to access a null pointer
#include <iostream>
int main()
{
int* i = 0;
int x = (*i);
std::cout << x;
}
当我使用Visual Studio 2010
编译并运行它时,上面的程序会崩溃,我知道它会崩溃,因为我将指针设置为0。
我想知道的是,在标准中定义的c++中访问null pointer
,或者它是未定义的,我只是碰巧很幸运,我的程序因为我的编译器/计算机/操作系统而崩溃了
如果定义了它,当我尝试访问空指针时,c++保证我什么?
对空指针解引用将调用未定义行为。它可能在不同的编译器上导致不同的结果,甚至更多——如果多次编译,在同一个编译器上可能会发生不同的结果。没有任何行为保证。
是什么让你的进程崩溃这里是操作系统停止你的程序摆弄内存它没有访问(地址0)。Windows将给你一个"访问冲突",Linux/Unix将给你一个"分段错误"。
另外,参见为什么在C和c++中NULL指针的定义不同?对于标准
在c++中没有定义,所以它可能不会在某些操作系统上崩溃,但是在当前(和以前)版本的Windows和Linux下,你可以指望崩溃,因为它们都不允许你(作为用户进程)访问该内存位置。
同样,在Windows下,如果你想导致程序中断,尝试DebugBreak();导致异常(MSDN表示:导致当前进程中发生断点异常。这允许调用线程通知调试器来处理异常。
相关文章:
- 通过指向指针数组的指针访问子类的属性
- 使用指针访问数组中的对象数据成员
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 运行时错误:引用绑定到类型为"int"的空指针
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 为什么我在空指针错误(链表)中获取成员访问权限
- 无法通过指针访问对象的成员
- 从向量到空指针的 memcpy(反之亦然)不起作用
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- decltype:使用指针访问类的静态成员
- 成员访问是否在空指针上定义C++?
- 是否可以使用指针访问变量以避免直接编辑变量?
- 空指针可访问
- 数组访问导致空指针取消引用
- 我尝试访问win32应用程序中的空指针值,但没有发生访问冲突
- 试图访问空指针
- 对字段的访问将导致空指针的解引用
- 访问非空指针时出现段故障
- c++断言中的未定义行为:访问无效/空指针
- 用于空指针安全访问的C/ c++宏