什么是bad_alloc,为什么输出屏幕不显示所有值

时间:2016-12-20 05:19:29

标签: c++

我为无限循环编写了一个程序如下,并不断分配新内存

#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开始。 为什么会这样?

1 个答案:

答案 0 :(得分:6)

是的,你内存不足。您目前正在无限循环的每次迭代中分配一个新的2000双数组。如上所述,除了使用所有可用内存外,您的程序不会自行结束。

至于缺少早期值,我怀疑它们是否会滚出控制台窗口的显示缓冲区。