关于C++异常机制的笔记(SEH, try-catch)
昨天晚上加班解决了一个问题,是由于无法正确的捕获到异常导致的。刚开始用try-catch,但是没法捕获到异常;后面改成SEH异常才解决。因此今天将这个问题重新梳理了一遍,关于try-catch, SEH的基本知识,大家可以从MSDN(https://msdn.microsoft.com/en-us/library/4t3saedz(v=vs.100).aspx),或者自行查找亦可。
关于二者之间的使用区别,做了些小小的测试,代码如下(OK-捕获异常、FAILED-未捕获异常):
void JsonTest()
{
char szJson[] = "{\"val\":1}";
Json::Reader reader;
Json::Value root;
if (false == reader.parse(szJson, root, false))
{
DEBUGA(DBG_DEBUG, "return false, JSON parse FAILED.");
return ;
} int val = root["val"].asInt();
string val2 = root["val"].asString();
} void StrTest()
{
wstring strVal = L"a";
strVal.at();
} void NULLPtrTest()
{
int* p = NULL;
*p = ;
} void ZeroTest()
{
int z = ;
double d = / z;
z = ;
} void OutRangeTest()
{
char arr[] = "abc";
char c = arr[];
} void TryCatchTest()
{
try
{
JsonTest(); // OK
StrTest(); // OK
NULLPtrTest(); // FAILED
ZeroTest(); // FAILED
OutRangeTest(); // FAILED
}
catch (...)
{
MessageBox(, L"try-catch", , );
}
} void SEHTest()
{
__try
{
JsonTest(); // OK
StrTest(); // OK
NULLPtrTest(); // OK
ZeroTest(); // OK
OutRangeTest(); // FAILED
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
MessageBox(, L"SEH", , );
}
} int main()
{
TryCatchTest();
SEHTest();
retrun ;
}
关于C++异常机制的笔记(SEH, try-catch)的更多相关文章
- [Java学习笔记] Java异常机制(也许是全网最独特视角)
Java 异常机制(也许是全网最独特视角) 一.Java中的"异常"指什么 什么是异常 一句话简单理解:异常是程序运行中的一些异常或者错误. (纯字面意思) Error类 和 Ex ...
- C++ Primer笔记2_四种类型转换_异常机制
1.类型转换 命名的强制类型转换: 有static_cast.dynamic_cast.const_cast.reinterpret_cast static_cast: 编译器隐式运行的不论什么类型转 ...
- Java笔记 - 异常机制
JAVA异常机制是Java提供的用于处理程序在运行期可能出现的异常事件(如数组下标越界.文件不存在等)的一种机制,使程序不会因为 异常的发生 而 阻断或产生不可预见的结果 .而且还可以将逻辑代码与错误 ...
- Java学习笔记--异常机制
简介 在实际的程序运行过程中,用户并不一定完全按照程序员的所写的逻辑去执行程序,例如写的某个模块,要求输入数字,而用户却在键盘上输入字符串:要求打开某个文件,但是文件不存在或者格式不对:或者程序运行时 ...
- [学习笔记]Java异常机制
概述 异常 程序在执行时出现的不正常情况,是对问题的描写叙述.将问题进行对象的封装. Java中的异常,就是对不正常情况进行描写叙述后的对象体现. 异常体系 Throwable |--Erro ...
- .net异常机制
异常机制简介 当CPU运行到一些非法的指令,例如除零错误,访问内存页失败等指令,CPU会生成一个硬件异常,不同的异常有固定的异常代码作为标识符,异常产生以后CPU暂时不能继续执行后续的指令—因为后续的 ...
- mfc 异常机制
异常 抛出异常 捕获异常 一.异常 迄今为止,我们处理程序中的错误一般都是用if语句测试某个表达式,然后处理错误的特定义代码. C++异常机制使用了三个新的关键字 (SEH(结构化异常处理)) try ...
- Atitit. Java script 多重多重catch语句的实现and Javascript js 异常机制
Atitit. Java script 多重多重catch语句的实现and Javascript js 异常机制 1. 语法错误(ERROR)和运行期错误(Exception) 1 2. 错误类型判断 ...
- C++ 异常机制
程序在运行的时候可能产生各种可预料到的异常,例如磁盘不足,内存不足,或是数学运算溢出,数组越界之类的.为了解决这些问题,C++提供了异常处理机制,它一般是由try语句和catch语句构成. 一.try ...
随机推荐
- Dancing Stars on Me(判断正多边形)
Dancing Stars on Me Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Ot ...
- UISegmentedControl(分页控制器) AND UISlider(滑块控制器)
- (void)viewDidLoad { [super viewDidLoad]; UIImageView * animatedImageView = [[UIImageView alloc]ini ...
- [译]Stairway to Integration Services Level 3 - 增量导入数据
让我们打开之前的项目:My_First_SSIS_Project_After_Step_2.zip 之前项目中我们已经向dbo.contact 导入了19972行,如果再次执行包会重复导入,让我们来解 ...
- opencv第一站:配置opencv环境(2015-12-12)
今天论坛申请的书< OpenCV 计算机视觉编程攻略(中国工信出版社)>到了,准备研究研究机器视觉. 晚上安装了 vc2008 及 opencv 最新版 3.0.0,试了各种配置都是错误提 ...
- python中mcmc方法的实现
MCMC方法在贝叶斯统计中运用很多,MIT发布的EMCEE是实现的比较好的.介绍页面在下面.源代码中examples里的代码可以帮助理解各种功能,特别是line.py 列出了最小二乘法,最大似然法和M ...
- html(第一天,div+css)
一.CSS布局属性 Width:设置对象的宽度(width:45px). Height:设置对象的高度(Height:45px;). Background:设置对象的背景颜色.背景图像. 1.背景颜色 ...
- document.getElementsByClassName在ie8及其以下浏览器的兼容性问题
原生js方法“document.getElementsByClassName”在ie8及其以下浏览器中,不能使用. 修改:加入兼容性判断,在需要用到该方法的位置修改为getClassNames方法. ...
- cmake学习笔记(五)
在cmake 学习笔记(三) 中简单学习了 find_package 的 model 模式,在cmake 学习笔记(四)中了解一个CMakeCache相关的东西.但靠这些知识还是不能看懂PySide使 ...
- java学习之字符流与字节流的转换
package com.io; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExce ...
- nginx源代码学习资源(不断更新)
nginx源代码学习是一个痛苦又快乐的过程,以下列出了一些nginx的学习资源. 首先要做的当然是下载一份nginx源代码,能够从nginx官方站点下载一份最新的. 看了nginx源代码,发现这是一份 ...