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

版权声明:瞎几把写 https://blog.csdn.net/weixin_43184615/article/details/83149109

练习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;   //没有异常则会执行到此
}

猜你喜欢

转载自blog.csdn.net/weixin_43184615/article/details/83149109