下面的代碼:ios
#include "stdafx.h" #include <iostream> int main() { try { char* pch; pch = (char*)00001234; //給予一個非法地址 *pch = 6; //對非法地址賦值,會形成Access Violation 異常 std::cout << "It is OK !" << std::endl; } catch(...) { std::cerr << "catched" << std::endl; } getchar(); return 0; }
在VS2015 C++項目中會產生異常以下:異步
Debug調試模式:spa
Release模式:調試
很明顯這個異常並無被處理!由於默認的VS2015編譯器並不處理SEH異常。SEH是結構化異常處理的簡稱,當在編譯選項中使用/EHa時,可包括 C/C++的結構化異常和系統生成或應用程序生成的異步異常,例如內存保護、 被零除和浮點衝突等。MSDN關於try, catch的使用說明code
設置EHa後從新編譯,再次運行,就能夠捕獲到SEH異常了:blog
捕獲到異常,點擊continue=>內存
不調試直接運行發現已經能捕獲到SEH異常了!get