为什么EXC_BAD_ACCESS而不只是一个例外?

时间:2012-10-19 17:33:14

标签: c++

  

可能重复:
  How to prevent crash in C++

typedef struct {
    int val;
} valStruct;

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

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

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

1 个答案:

答案 0 :(得分:3)

很快:没有。分段错误(以及一些其他常见的编程错误)不是“高级”,足以被C ++异常处理程序捕获,因此程序将崩溃。解决方案:不要依赖C ++异常神奇地避免思考和编写好的代码。他们不是为了这个。在解除引用它们之类的事情之前,你应该检查指针是非NULL的。