C++使用try,catch在VS2015中捕獲異常

下面的代碼: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

相關文章
相關標籤/搜索