【发布时间】:2015-06-01 21:12:17
【问题描述】:
我的目标是找到(p个连续数的最小值)*p的最大值。这里 1
" 在抛出 'std::bad_alloc' 的实例后调用终止 什么():std::bad_alloc 此应用程序已请求运行时以不寻常的方式终止它。 请联系应用程序的支持团队了解更多信息。”
我发现错误是因为程序试图访问不允许的内存。但我没有得到代码的哪一部分正在尝试访问未分配的内存。请帮助我。
#include <iostream>
using namespace std;
int main(){
int N=0;
cin>>N;
int **A,*B,i,j,num;
A = new int*[N];
for(i=0;i<N;i++)
A[i] = new int[N]();
B = new int[N]();
for(i=0;i<N;i++){
cin>>num;
A[0][B[0]] = num;
for(j=0;j<B[0];j++){
A[j+1][B[j+1]] = min(A[j][B[j+1]],A[j][B[j+1]+1]);
B[j+1]++;
}
B[0]++;
}
long long maxim = 0;
for(i=0;i<N;i++){
for(j=0;j<B[i];j++){
if(A[i][j]*(i+1) > maxim)
maxim = A[i][j]*(i+1);
}
}
cout<<maxim;
delete []A;
delete []B;
return 0;
}
【问题讨论】:
-
也许 N*N 整数没有空间?毕竟,100000 * 100000 * 4 = 是 38000 MB,所以至少我的 16GB RAM 的机器无法应付。
-
请注意,“bad_alloc”不是“使用未分配的内存”,而是“没有足够的可用内存”。
-
对于 64 位应用和操作系统应该没问题,
标签: c++ runtime-error