我正在尝试这段代码来检查是否捕获了除以零异常:
int main(int argc, char* argv[])
{
try
{
//Divide by zero
int k = 0;
int j = 8/k;
}
catch (...)
{
std::cout<<"Caught exception\n";
}
return 0;
}
当我使用 VC6 编译此代码时,catch 处理程序被执行,输出为“捕获异常”。然而,当我使用 VS2008 编译这个程序时,程序在没有执行 catch 块的情况下崩溃了。造成差异的原因可能是什么?
在项目 -> 属性 -> 配置属性 -> c/c++ -> 代码生成 -> 启用 c++ 异常下启用结构化异常处理。
使用 try except 。理想情况下,使用过滤器检查异常代码,然后返回常量信号(如果想要捕获)。我在这里跳过了这一点,但我建议你看看here http://msdn.microsoft.com/en-us/library/s58ftw19(VS.80).aspx有关过滤器的示例。
#include <iostream>
#include <windows.h>
int main(int argc, char* argv[])
{
__try
{
//Divide by zero
int k = 0;
int j = 8/k;
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
if(GetExceptionCode()==EXCEPTION_INT_DIVIDE_BY_ZERO)
std::cout << "Caught int divison exception\n";
else
std::cout << "Caught exception\n";
system("pause");
}
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)