抓住写作访问异常并不起作用

时间:2017-04-20 09:51:17

标签: c++ c++11

这里我试图捕获写入访问冲突,但它不起作用。我尝试了其他一些方法,但没有一个对我有用。你能解释它应该如何运作吗?

int main(){
    int *pint = new int();

    delete pint;

    try
    {
        *pint = 100;
    }
    catch (...)
    {
        cout << "this is the one " << endl;
    }
}

2 个答案:

答案 0 :(得分:1)

内存访问冲突具有未定义的行为 - 因此,它们未指定抛出。不可能抓到一些没被抛出的东西。

无法检测标准C ++中是否发生了内存冲突(或其他任何具有未定义行为的内容) - 尽管可以使用外部工具来调试程序:http://valgrind.org/

答案 1 :(得分:0)

当你做非法行为时,C ++不会抛出运行时异常(读取:使用未定义行为的东西)。这只是一件Java事。在C ++中,这并没有发生。

当您编写*pint = 100;时,您将100分配给您不再拥有的内存,一个可能的结果是内核将SIGSEGV发送到应用程序,有效地将其杀死,因为它访问了内存并没有#39;拥有。有一些方法可以捕获这个信号,所以你可以使用它,但不推荐 - 你很少有真正的理由。

但是你不能使用try-catch,因为没有任何例外。该程序也可以继续执行,你没有任何保证。