关于C++异常机制的笔记(SEH, try-catch)
2016-01-06 16:52
183 查看
昨天晚上加班解决了一个问题,是由于无法正确的捕获到异常导致的。刚开始用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(10); } void NULLPtrTest() { int* p = NULL; *p = 1; } void ZeroTest() { int z = 0; double d = 100 / z; z = 100; } void OutRangeTest() { char arr[] = "abc"; char c = arr[5]; } void TryCatchTest() { try { JsonTest(); // OK StrTest(); // OK NULLPtrTest(); // FAILED ZeroTest(); // FAILED OutRangeTest(); // FAILED } catch (...) { MessageBox(0, L"try-catch", 0, 0); } } void SEHTest() { __try { JsonTest(); // OK StrTest(); // OK NULLPtrTest(); // OK ZeroTest(); // OK OutRangeTest(); // FAILED } __except(EXCEPTION_EXECUTE_HANDLER) { MessageBox(0, L"SEH", 0, 0); } } int main() { TryCatchTest(); SEHTest(); retrun 0; }
相关文章推荐
- UML中关联,聚合,组合的区别及C++实现
- c++反射机制的实现
- C/C++调用Windows DOS命令
- native C++ 动态调用.NET DLL
- C++11 学习/简单使用
- C++编写ActiveX ocx控件在网页中调用失败问题
- oc语言常用的字符串函数
- 【C++11新特性】 auto关键字
- 静态库单例问题
- c++获取随机数
- C++中BMP文件头函数编写(24bit真彩、8位灰度和8位伪彩色)
- const 成员变量初始化规则
- 《C++Primer 5e》学习笔记(5):函数
- C++11随机数
- C++11多线程(十六):实战-生产者消费者模型
- 【c/c++】构造函数的默认参数以及缺省参数值
- [C++] upper_bound和lower_bound
- C++ BigInteger模板
- 【c++技巧】do...while(0)在宏定义中的巧妙用法
- C/C++结构体字节对齐详解