试图访问空指针

Attempting to access a null pointer

本文关键字:空指针 访问      更新时间:2023-10-16
#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表示:导致当前进程中发生断点异常。这允许调用线程通知调试器来处理异常。