c++坏分配错误

C++ bad-alloc error

本文关键字:错误 分配 c++      更新时间:2023-10-16

我需要为10000个点的数据集找到全对距离。我在c++编码使用向量存储点。这是向量:

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

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

对于高达8000点的小数据集可以很好地工作。但是,当我运行相同的代码较大的数据集,我得到以下错误:

抛出'std::bad_alloc'实例后终止调用

(): std:: bad_alloc

abort (core dumps).

我已经上网了,但找不到解决办法。

您正在使用太多内存,并且似乎vector无法分配此内存。

如上所述,如果只考虑双精度类型,每个向量大约有512 MB的内存(std::vector类也有一些内部变量和vfptable,分配了8000次)。

std:vector习惯于在每次超过预分配的限制时增加它的大小,以防止在每个新添加的元素上产生昂贵的reallos。

因此,vector的实际大小总是大于vector内部元素的个数。

尝试管理您自己的内存,特别是如果您从一开始就知道元素的数量。

std:vector在你不知道要添加多少元素时非常有用,对于6400万元素的大小绝对不是这样:)。