【try……catch】C++try……catch笔记(C语⾔中也可以Try-
Catch异常处理)
⽬录
没⽤⽤到MFC,是不⽀持CException的。
C++ try……catch
catch(CException *e) 打印异常信息
在进⾏各种各样的操作的时候,有时会出现未知的错误,⼜不知道什么类型的,⼀时摸不着头脑了,以前写过捕获的代码,但是⽤到的时候忘记了,现在记下来:
try
{
MoveFile("D:\\fd.txt", "C:\\dbdw\\b.txt"); //将D:\fd.txt移动到C:\dbdw并改名为b.txt(原来⽬录下⽂件不存在)
}
catch(CException *e)//&e
{
TCHAR szError[1024];
e->GetErrorMessage(szError,1024); // e.GetErrorMessage(szError,1024);
::AfxMessageBox(szError);
}
那么这样就可以知道什么错误了!
不经意间的内存泄露:try-catch(CException *e) [异常对象需要⼿动释放]
原本以为异常对象是不⽤⼿动释放的(即不⽤delete)
但今天发现跑了N天的服务器程序内存使⽤增⼤
在调试的时候也发现VS给出内存泄露的提⽰
才知道CException⾃带Delete⽅法且需要⼿动调⽤
像这样才对
try
{
}
catch (CException *e)
{
e->Delete();
}
在尽量保证代码健壮性的前提下
再包上⼀层try-catch确实能够应对⼀些意外情况
但所有基于CException的异常不能直接delete
像下⾯的写法是错误的
try
{
}
catch (CException *e)
{
delete e;
}
原⽂:blog.csdn/sidyhe/article/details/47400787
C++ try catch 捕获空指针异常,数组越界异常(windows的 SEH)
SEH的全称是Structured Exception Handling,是Windows操作系统提供的⼀种异常处理⽅式。SEH是属于操作系统的特性,不为特定语⾔设计,从它的名字就能看出它是⼀种结构化的异常处理⽅式。SEH包括了2个部分:终⽌处理__try/__finally和异常处理
__try/__except,下⾯分别进⾏介绍。
终⽌处理__try/__finally
__try/__finally可以保证⽆论try块内的代码执⾏结果如何,finally块内的代码总会被调⽤和执⾏。现在⽤下⾯的这个VC++中的控制台程序来说明。
int _tmain(int argc, _TCHAR* argv[])
{
__try
{
MessageBox(NULL, _T("Message from '__try' section"), _T("Test"), MB_OK);
/
/ 除零,⼈为的使程序崩溃
//
int i = 13;
int j = 0;
int m = i / j;
}
__finally
{
// 在这⾥添加处理程序崩溃情况的代码
//
// 这⾥以弹出⼀个对话框为例⼦
/
/
MessageBox(NULL, _T("Message from '__finally' section"), _T("Test"), MB_OK);
}
MessageBox(NULL, _T("Funcation completed"), _T("Test"), MB_OK);
return 0;
}
异常处理__try/__excepttry catch的使用方法
__try/__except是⽤来捕捉异常的,只有当try块中的代码出现异常的时候,except块中的代码才会被调⽤和执⾏。它的语法是这样的:
__try
{
// guarded code
}
__except(expression)
{
// exception handler code
}
它最⼤的⼀个好处就是可以完全控制异常进程。expression的值决定了异常被处理完后,进程该如何执⾏。下⾯依然⽤VC++中的控制台程序来说明。
int _tmain(int argc, _TCHAR* argv[])
{
__try
{
MessageBox(NULL, _T("Message from '__try' section"), _T("Test"), MB_OK);
// 除零,⼈为的使程序崩溃
//
int i = 13;
int j = 0;
int m = i / j;
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
// 在这⾥添加处理程序崩溃情况的代码
//
// 这⾥以弹出⼀个对话框为例⼦
/
/
MessageBox(NULL, _T("Message from '__except' section"), _T("Test"), MB_OK); }
MessageBox(NULL, _T("Funcation completed"), _T("Test"), MB_OK);
return 0;
}
以下是原⽂来旧⽂,但是尝试了不⾏,应该是博主写错了,应该是SEH
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论