我为无限循环编写了一个程序如下,并不断分配新内存
#include<iostream>
using namespace std;
int main()
{
for (int i = 0; ; ++i)
{
double* x = new double[2000];
*x = i * 2.5;
cout << i <<" "<< *x << endl;
}
return 0;
}
它成功运行,最后以bad_alloc结束。
133415 333538
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
我认为这表明没有更多的记忆。 请告诉我的想法是否正确。 并且输出屏幕也没有显示从零开始的所有值,而是从133125开始。 为什么会这样?
答案 0 :(得分:6)
是的,你内存不足。您目前正在无限循环的每次迭代中分配一个新的2000双数组。如上所述,除了使用所有可用内存外,您的程序不会自行结束。
至于缺少早期值,我怀疑它们是否会滚出控制台窗口的显示缓冲区。