C++捕獲除0和空指標異常
阿新 • • 發佈:2019-02-10
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).或者按照下圖設定即可: