-1

可能重复:
如何防止 C++ 中的崩溃

typedef struct {
    int val;
} valStruct;

main()
{
    try {
        valStruct *s = NULL;
        int v = s->val;       // bad 
    }
    catch (...) {}
}

对 MacOS 来说相当新。在调试器下运行我得到一个 EXC_BAD_ACCESS 中断。不难猜测这意味着发生了错误的内存访问,但我没有得到 C++ 异常,并且在上面的代码中我的 catch 不会被调用。

这似乎是一件坏事,几乎使 C++ 异常处理变得无用。除非这只是一个调试的事情。如果我在发布模式下运行,或更改设置,这是否会作为例外处理?

4

1 回答 1

5

很快:没有。分段错误(以及其他一些常见的编程错误)不够“高级”,无法被 C++ 异常处理程序捕获,因此程序只会崩溃。解决方案:不要依赖 C++ 异常神奇地使您免于思考和编写好的代码。他们不是为了那个。在取消引用它们之前,您应该真正检查指针是否为非 NULL 和类似的东西。

于 2012-10-19T17:37:11.527 回答