第16章 异常和错误
程序运行时可能会出现这样那样的问题,例如文件打开不成功,以及内存耗尽等,通常,通过防错编码可以应付这些问题,但要求在程序编写过程中对所有可能出现的问题进行防错处理显然是不现实的,为此C++提供了异常处理机制来解决运行错误。首先来了解编码时的防错机制。
本章主要涉及以下知识点。
❑编码时的防错:介绍abort函数和exit函数的使用。
❑异常机制:介绍在程序运行出现异常时如何处理。
❑异常发生时的内存管理:介绍发生异常时的内存管理方法。
❑auto_prt类:介绍智能指针的优点及其使用。
16.1 编码时的防错
在文件输入输出一章中已经使用了编码时的防错,举例来说,调用流对象的is_open函数,如果返回true,证明文件打开成功,否则,文件打开失败,程序报警退出,这就是基本的防错处理,比只执行open函数却不检查是否成功的代码更加完善了。
16.1.1 调用abort函数或exit函数
abort函数的原型位于头文件cstdlib中,无形参,abort函数的表现及返回值取决于不同的编译器和系统实现,一个典型实现(DOS下)是向标准错误输出流(cerr)发送“程序异常终止”(Abnormal Program Termination)消息,并终止程序,如示例代码16.1所示。
代码16.1 abort函数的使用FuncAbort
<——————————文件名:example1601.cpp————————————————-> 01 #include<iostream> 02 #include<cstdlib> 03 using namespace std; 04 int main() 05 { 06 int x,y; 07 cout<<"请输入两个整数:"<<endl; 08 cin>>x>>y; 09 if(y==0) 10 { 11 cout<<"错误,y为0"<<endl; 12 abort();//如果y等于0,调用abort函数 13 } 14 else 15 cout<<"x/y is"<<(x/y)<<endl; 16 return 0; 17 }
输出结果如下所示。
请输入两个整数: 4 2(用户输入) x/y is 2或 请输入两个整数: 4 0(用户输入) 错误,y为0 Abnormal Program Termination
注意
代码16.1 应采用VC的release模式编译。
【代码解析】将用户输入的两个int型的值x和y作除法处理,为防止被0除的现象发生,对y的值进行判断,如果y不为0,则进行正常输出,否则在第12行调用abort函数,通知操作系统,处理失败,Abnormal Program Termination消息发送到标准错误流cerr,显示在屏幕上。
此外,还可以使用exit(int)函数,该函数并不发送错误消息,只是结束程序,并将参数表中的int值传递给操作系统或上级调用函数。