C++使用try,catch在VS2015中捕获异常

下面的代码:

#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调试模式:

8a03acaca697506ea0dd09102837f8b1534.jpg

Release模式:

8cd6e70d08cbde454bd71cdcb8541283af1.jpg

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

a82ff557458f313284c1c03d1d9bbae7f73.jpg

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

9fffe13d58f4c275d73995574f50dbf204a.jpg

捕获到异常,点击continue=>

45c0e3701d9ce116aacd03569d6ae814135.jpg

不调试直接运行发现已经能捕获到SEH异常了!

 

转载于:https://my.oschina.net/u/3489228/blog/1833306

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值