异常处理
异常处理
主要内容 ·异常概述 ■C++的异常处理机制 ■程序调试
主要内容 ◼ 异常概述 ◼ C++的异常处理机制 ◼ 程序调试
异常概述 ■程序的错误通常包括: 语法错误:指程序的书写不符合语言的语法规 则。这类错误可由编译程序发现。例如: ■使用了未定义或未声明的标识符 ■左右括号不匹配 逻辑错误(或语义错误):指程序设计不当造 成程序没有完成预期的功能。这类错误可通过 对程序进行静态分析和动态测试发现。例如: ■把两个数相加写成了相乘 排序功能未能正确排序
异常概述 ◼ 程序的错误通常包括: • 语法错误:指程序的书写不符合语言的语法规 则。这类错误可由编译程序发现。例如: ◼ 使用了未定义或未声明的标识符 ◼ 左右括号不匹配 ◼ ...... • 逻辑错误(或语义错误):指程序设计不当造 成程序没有完成预期的功能。这类错误可通过 对程序进行静态分析和动态测试发现。例如: ◼ 把两个数相加写成了相乘 ◼ 排序功能未能正确排序 ◼
运行异常:指程序设计对程序运行环境考虑不 周而造成的程序运行错误。例如: ■对于“/y”操作,y输入了“零” ·由内存空间不足导致的访问空指针: int*p=new int;/动态分配空间,可能失败! *p三10;/如果上面new操作失败,p为空指针或抛出异常 ■输入数据的数量超过存放它们的数组的大小导致数组 下标越界。 多任务环境可能导致的文件操作错误。 ■给一个采用二分法查找的函数提供了一个未排序的数 组。 数据超出了其类型所允许的范围(溢出)
• 运行异常:指程序设计对程序运行环境考虑不 周而造成的程序运行错误。例如: ◼ 对于“x/y”操作,y输入了“零”。 ◼ 由内存空间不足导致的访问空指针: int *p=new int; //动态分配空间,可能失败! *p = 10; //如果上面new操作失败,p为空指针或抛出异常 ◼ 输入数据的数量超过存放它们的数组的大小导致数组 下标越界。 ◼ 多任务环境可能导致的文件操作错误。 ◼ 给一个采用二分法查找的函数提供了一个未排序的数 组。 ◼ 数据超出了其类型所允许的范围(溢出)。 ◼
逻辑错误与运行异常的比较 逻辑错误(环境正常,结果不正确 》 bool strlonger(char *str1,char *str2) return strlen(str1)-strlen(str2)>0; } strlonger("abc","1234")// 运行异常(环境正常,结果正确:环境不正常,结果不 正确) double sum(double a[],unsigned int len) double result=0.0; for (int i=0;i<=len-1;i++) result +a[i]; return result; sum(.,0)/?
◼ 逻辑错误(环境正常,结果不正确) bool strlonger(char *str1,char *str2) { return strlen(str1)-strlen(str2)>0; } • strlonger("abc","1234") //? ◼ 运行异常(环境正常,结果正确;环境不正常,结果不 正确) double sum(double a[], unsigned int len) { double result=0.0; for (int i=0; i<=len-1; i++) result += a[i]; return result; } • sum(...,0) //? 逻辑错误与运行异常的比较