Essential c++ 第七章异常处理(exception handling)课后练习

练习7.1
请找出以下函数中所有可能发生错误的地方。

int *alloc_and_init(string file_name)
{
	ifstream infile(file_name.c_str());
	int elem_cnt;
	infile >> elem_cnt;
	int *pi = allocate_array(elem_cnt);

	int elem;
	int index = 0;
	while (infile >> elem)
		pi[index++] == elem;

	sort_array(pi, elem_cnt);
	register_data(pi);

	return pi;
}

练习7.2
下列函数被上题的alloc_and_init()调用,执行失败时会发出异常:
allocate_array() 发出异常noMem
sort_array() 发出异常Int
register_data() 发出异常string
安置一个try块,以及相应的catch子句,将错误打印出来即可。

int *alloc_and_init(string file_name)
{
	ifstream infile(file_name.c_str());
	if (!infile)return 0;  //需考虑文件可能未打开

	int elem_cnt;
	infile >> elem_cnt;
	if (!infile)return 0;   //需考虑内容读取失败
 
	try{
		int *pi = allocate_array(elem_cnt);   //(1)

		int elem;
		int index = 0;
		while (infile >> elem)
			pi[index++] == elem;

		sort_array(pi, elem_cnt);  //(2)
		register_data(pi);   //(3)
	}
	catch (const noMem &memFail){    //异常情况1
		cerr << "alloc_and_init():allocate_array failure!\n"
			<< memFail.what() << endl;
		return 0;
	}
	catch (int &sortFail){      //异常情况2
		cerr << "alloc_and_init():sort_array failure!\n"
			<< "thrown integer values: " << sortFail << endl;
		return 0;
	}
	catch (string &registerFail){    //异常情况3
		cerr << "alloc_and_init():register_data failure!\n"
			<< "thrown integer value: " << registerFail << endl;
		return 0;
	}
	return pi;   //没有异常则会执行到此
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值