分配新向量时std :: bad_alloc - 我该怎么办

时间:2014-06-25 07:41:07

标签: c++ eclipse memory-management bad-alloc

我遇到了问题。 我有一个巨大的c ++项目,我在几点改变以满足我的要求。 我加载了比预期更多的数据,并且在该程序的某个时刻,有一个新的向量分配了数据的大小乘以另一个数字。

vector = new real[data.size()*28];

这里我收到错误消息:

terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc

因为我无法分配那么多空间。 我无法更改此向量,因为它在程序中的许多不同部分中使用,并且(对我来说)可能无法在此处将其余程序拟合到新定义中。

我能做些什么,我可以使用这个向量,但是可以将我的大数据集放入其中?

Btw:我使用eclipse,也许我可以增加在eclipse本身分配的可能空间的大小?

谢谢!

2 个答案:

答案 0 :(得分:2)

正如Encryptyon指出的那样(并且他应该得到信用),你需要将你的内存分配为一个非连续的块。您可以使用std::deque执行此操作。

std::deque<float> v( data.size() * 28 );

您可以使用operator[]访问任何成员。

real x = v[1000000];

你也可以遍历(部分)双端队列,好像它是std::vector,因为std::deque的接口与std::vector非常相似。但是,你不能做的是&v[0](或c ++ 11中的v.data()),因为容器的内部存储很可能是非连续的。

答案 1 :(得分:1)

你无法分配那么多连续的ram,请使用deque