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