我遇到了问题。 我有一个巨大的c ++项目,我在几点改变以满足我的要求。 我加载了比预期更多的数据,并且在该程序的某个时刻,有一个新的向量分配了数据的大小乘以另一个数字。
vector = new real[data.size()*28];
这里我收到错误消息:
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
因为我无法分配那么多空间。 我无法更改此向量,因为它在程序中的许多不同部分中使用,并且(对我来说)可能无法在此处将其余程序拟合到新定义中。
我能做些什么,我可以使用这个向量,但是可以将我的大数据集放入其中?
Btw:我使用eclipse,也许我可以增加在eclipse本身分配的可能空间的大小?谢谢!
答案 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