下面的代码:
#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调试模式:

Release模式:

很明显这个异常并没有被处理!因为默认的VS2015编译器并不处理SEH异常。SEH是结构化异常处理的简称,当在编译选项中使用/EHa时,可包括 C/C++的结构化异常和系统生成或应用程序生成的异步异常,例如内存保护、 被零除和浮点冲突等。MSDN关于try, catch的使用说明

设置EHa后重新编译,再次运行,就可以捕获到SEH异常了:

捕获到异常,点击continue=>

不调试直接运行发现已经能捕获到SEH异常了!
本文介绍如何在Visual Studio 2015中处理C++代码产生的SEH异常,通过设置编译选项/EHa来捕获并处理非法内存访问等异常情况。

5037

被折叠的 条评论
为什么被折叠?



