- 1.为什么需要异常处理?
- 2.在c++ 中异常处理的方法??
- 3.异常的抛出
- 4.异常的类型捕捉
- 5.系统预定义的异常类型
- 6.异常的再抛出
- 用 new 运算符动态分配空间时,空间不够导致无法分配;
- 访问数组元素时,下标越界;打开文件读取时,文件不存在。
- 访问了野指,出现内存错误等等 …
2.在c++ 中异常处理的方法??
利用try (测试) throw(抛出异常) catch(处理异常)
-
在c 语言 中异常处理的方法??
利用 if 语句判断 *** 作是否正确。 -
c/c++ 中异常处理的区别:
c++ 中的处理能力更强,逻辑性更严谨,且系统中某些函数已经预定义了异常的抛出。如at,new 等等…
-
语法:
try { 用户需要执行的代码 } catch(异常类型) { 异常处理代码 } ... catch(异常类型) { 异常处理代码 }
-
例子:
#include
using namespace std; int main() { try{ int *p = new int[0x0fffffffffffffff]; //系统自动抛出异常 } catch(...) //接收异常 { cout << "程序出现异常" << endl; } }
当系统不会自动抛出异常时,用户就要手动抛出异常。
string a="hello";
try{
cout << a.at(1000000) << endl; //带有自动抛出异常的功能
}catch(...)
{
cout << "代码出现异常" << endl;
}
try{
cout << a[1000000] << endl; //不具有自动抛出异常
}catch(...){
cout << "代码异常2" << endl;
}
抛出异常语法:
throw 表达式;
例子:
#include
using namespace std;
int main()
{
string a="hello";
try{
cout << a.at(1000000) << endl; //带有自动抛出异常的功能
}catch(...)
{
cout << "代码出现异常" << endl;
}
try{
int size=1000000;
if(size >= 5) //手动 抛出异常
{
throw "数组越界";
}
cout << a[size] << endl; //不具有自动抛出异常
}catch(...){
cout << "代码异常2" << endl;
}
}
4.异常的类型捕捉
catch(…) : 可以捕捉任何的异常类型,拿不到异常的抛出数据
#include
using namespace std;
class base
{
};
int main()
{
base a;
try{
//直接抛出异常
throw a;
}
catch(int a) //捕捉 抛出的整形的异常
{
cout << "int"<<a << endl;
}
catch(double a)//捕捉 抛出的浮点型的异常
{
cout <<"double"<< a << endl;
}
catch(const char *a)//捕捉 抛出的字符串类型异常
{
cout << "char *"<<a << endl;
}
catch(...)
{
cout << "其他异常" << endl;
}
}
5.系统预定义的异常类型
catch(exception &e) //利预定义异常类型可以,告诉用户异常原因
{
cout << "其他异常" << e.what() << endl;
}
6.异常的再抛出
当一个函数出现异常的时候,抛出异常并,处理的的话,这个异常会继续往上抛出,直到处理为之!!
#include
using namespace std;
//test 自己抛出自己处理
void test()
{
try{
throw "抛出异常";
}
catch(const char *a){ //在这里已经把异常处理掉了
cout << "输出异常:" << a << endl;
}
}
void test0() //出现了异常,未处理
{
throw "抛出异常"; //只在当前函数中抛出不处理
}
void test1() //把异常抛出到 test1中 ,未处理
{
cout << "test1" << endl;
test0();
cout << "test endl" << endl;
}
int main() //继续把异常抛出到 main 中,catch已经处理
{
try{
// test(); //执行test 函数
test1();
}
catch(...){
cout << "出现异常并未处理" << endl;
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)