C++捕获除0和空指针异常
windows环境下才行:
除0异常
- __try
- {
- int y = 0;
- int x = 1 / y;
- }
- __except(GetExceptionCode() == EXCEPTION_INT_DIVIDE_BY_ZERO ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
- {
- printf("divide by zero exception...");
- }
空指针异常
- __try
- {
- char* p = NULL;
- strcpy(p, "test");
- }
- __except(GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
- {
- printf("access violation exception...");
- }
代码如入:
class A
{
public:
int a;
};
int main(int argc, _TCHAR* argv[])
{
try
{
A *p = NULL;
p->a = 1;
}
catch(...)
{
cout << "...";
}
}
上面的代码,在VC 6下能正常捕获异常,但是在VS2010下,程序会直接死掉,不会输入...,请高人指示
答:
用_try是一种办法,但是由于程序已经差不多写好了的,所以改起来很麻烦,工作量大,最终没有采用,不过还是谢谢。
最后我的解决办法:
右键点项目:选property->c++->command line,在下面输入参数:/EHa就可以了。(系统默认好像是/EHs).或者按照下图设置即可: