1. 程式人生 > >C++捕獲除0和空指標異常

C++捕獲除0和空指標異常

windows環境下才行:

除0異常

  1. __try
  2.     {  
  3.         int y = 0;  
  4.         int x = 1 / y;  
  5.     }  
  6.     __except(GetExceptionCode() == EXCEPTION_INT_DIVIDE_BY_ZERO ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)  
  7.     {  
  8.         printf("divide by zero exception...");  
  9.     }  

空指標異常

  1. __try
  2.     {  
  3.         char* p = NULL;  
  4.         strcpy(p, "test");  
  5.     }  
  6.     __except(GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)  
  7.     {  
  8.         printf("access violation exception...");  
  9.     }  

程式碼如入:
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).或者按照下圖設定即可: