[英]C++ Exception handling and dynamic allocation of memory
我正在学习C ++中的异常处理,以下是我尝试将其应用于动态分配内存的方法:
#include <iostream>
using namespace std;
int main()
{
const char * message[] = {"Dynamic memory allocation failed! "};
enum Error{
MEMORY
};
int * arr, length;
cout << "Enter length of array: " << endl;
cin >> length;
try{
arr = new int[length];
if(!arr){
throw MEMORY;
}
}
catch(Error e){
cout << "Error!" << message[e];
}
delete [] arr;
}
它不能正常工作,如果我输入一些巨大的长度,而不是显示消息“动态内存分配失败!”(没有引号)我得到:
抛出'std :: bad_alloc'的实例后调用terminate():std :: bad_alloc
此应用程序已请求Runtime以不寻常的方式终止它。 有关更多信息,请联系应用程序的支持团队。
进程返回3(0x3)执行时间:3.835 s按任意键继续。
任何的想法?
运算符new本身会抛出错误。 并且它的错误不是你指定的类型Error,所以如果无法分配内存,那么你的if语句将永远不会被执行,因为异常将被抛出。
您可以使用if删除块并尝试捕获由new运算符抛出的异常。 或者使用std::nothrow
arr=new (std::nothrow)[length];
运算符分配内存
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.