typedef struct {
int val;
} valStruct;
main()
{
try {
valStruct *s = NULL;
int v = s->val; // bad
}
catch (...) {}
}
MacOS相当新鲜。在调试器下运行我得到一个EXC_BAD_ACCESS中断。不难猜测这意味着发生了错误的内存访问,但我没有得到C ++异常,并且在上面的代码中我的catch不会被调用。
这似乎是一件坏事,几乎使C ++异常处理变得毫无用处。除非这只是一个调试的事情。如果我在发布模式下运行,或更改设置,是否会将其作为例外处理?
答案 0 :(得分:3)
很快:没有。分段错误(以及一些其他常见的编程错误)不是“高级”,足以被C ++异常处理程序捕获,因此程序将崩溃。解决方案:不要依赖C ++异常神奇地避免思考和编写好的代码。他们不是为了这个。在解除引用它们之类的事情之前,你应该检查指针是非NULL的。