C++ 异常处理
// ConsoleApplication10.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <windows.h> using namespace std; BOOL bTest = false; void Get() { char *p = NULL;//2 __try{ if (!bTest){ bTest = true; strcpy(p, "123");//3
//下面不被执行
//...
} else{ p = new char[100]; strcpy(p, "123"); } } __finally{//在处理 if (p){//5,delete不执行 delete[]p; } } } void Test() { int i = 0; while (i++ < 2){ __try{ Get();//1 } __except (EXCEPTION_EXECUTE_HANDLER){//4 printf("异常出现,但是不作处理\n");//6 } } } int _tmain(int argc, _TCHAR* argv[]) { Test(); return 0; }
第一次循环如上。
第二次循环如下:
// ConsoleApplication10.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <windows.h> using namespace std; BOOL bTest = false; void Get() { char *p = NULL;//2 __try{ if (!bTest){ bTest = true; strcpy(p, "123"); } else{ p = new char[100]; strcpy(p, "123");//3 } } __finally{ if (p){ delete[]p;//4 } } } void Test() { int i = 0; while (i++ < 2){ __try{ Get();//1 } __except (EXCEPTION_EXECUTE_HANDLER){ printf("异常出现,但是不作处理\n"); } } } int _tmain(int argc, _TCHAR* argv[]) { Test(); return 0;//5 }