Sta*_*ter 4 c++ arrays memory-management bad-alloc
我编写了以下代码来为数组分配内存:
try {
int n = 0;
cin >> n;
double *temp = new double[n];
...
}
catch(exception& e) {
cout << "Standard exception: " << e.what() << endl;
exit(1);
}
Run Code Online (Sandbox Code Playgroud)
当然我正在检查n是否为负值等但是当我输入一些超过536*(10 ^ 6)的大数字时,我没有得到一个错误的alloc异常但是"无效的分配大小:4294967295字节"崩溃.
EG我输入n = 536*(10 ^ 6) - > bad-alloc异常我输入n = 537*(10 ^ 6) - >无效分配大小:4294967295字节 - >崩溃
任何想法为什么会这样?
小智 12
调用new double[n]
调用operator new
大小为的全局函数n * sizeof(double)
.如果operator new
然后发现它无法满足请求,则会抛出异常.
但是,不能在这里发生:的产品n
和sizeof(double)
是如此之大,这实际上是不可能的调用operator new
可言,因为你要求的只是普通的大小不会在一个合适的size_t
.实现方式因处理方式不同而有所不同,但您的程序显然会中止.
如果要处理此问题,可以n <= SIZE_MAX / sizeof(double)
在尝试分配之前进行检查.