C ++ bad-alloc错误

时间:2014-03-21 05:53:01

标签: c++ vector bad-alloc large-data

我需要找到10000点数据集的所有对距离。我用C ++编写代码来存储点。这是我的载体:

vector <vector <double> > data.
vector <vector <double> > dist.

我正在从文件中读取输入数据并存储在数据中。然后我计算所有对距离并将其存储在dist。

适用于小型数据集,最高可达8000点。但是当我为更大的数据集运行相同的代码时,我收到以下错误:

  

在抛出'std :: bad_alloc'

的实例后终止调用      

what():std :: bad_alloc

     

中止(核心倾销)。

我上网了,但找不到解决办法。请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

您使用的内存过多,而且矢量无法分配此内存。

如上所述,如果只考虑双精度数,那么每个矢量的内存大约为512 MB(std :: vector类也有一些内部变量和vfptable,你可以分配8000次)。

std:vector每次超过它的预分配限制时都会增加它的大小,以防止每个新元素的重新分配都很昂贵。

因此,向量的真实大小将始终大于其内部元素的数量。

尝试为这么大的数字管理你自己的记忆,特别是如果你从一开始就知道元素的数量。

std:当你不知道要添加多少元素时,vector非常有用,而且肯定不是6400万元素的大小:)。