我正在尝试使用 catch/try 捕获异常:
void TestCall()
{
int b=0;
try
{
int a = 1/b;
}
catch(...)
{
test(1);
}
}
该表达式int a = 1/b;
显然抛出了一个除以 0 的异常,我想在 catch 块中捕获它。但是 Visual C++ 顽固地引发了一个错误,并没有抓住它。秘诀是什么?
我正在尝试使用 catch/try 捕获异常:
void TestCall()
{
int b=0;
try
{
int a = 1/b;
}
catch(...)
{
test(1);
}
}
该表达式int a = 1/b;
显然抛出了一个除以 0 的异常,我想在 catch 块中捕获它。但是 Visual C++ 顽固地引发了一个错误,并没有抓住它。秘诀是什么?
您将 C++ 异常与其他异常混淆了。在 C++ 中,只有在使用
throw
. 使用内置运算符时除以 0/
是未定义的行为:在 Windows 上,除以零会生成 SEH 异常,代码为STATUS_INTEGER_DIVIDE_BY_ZERO (0xC0000094)。要以 C++ 异常样式处理它,您可以设置 Visual C++ 编译器选项/EHa,或设置未处理的异常过滤器:
(第二种方法只在没有调试的情况下运行,因为工作室调试器会强制程序在 SEH 异常上中断。)