[英]std::bad_alloc when allocating a new vector - what can I do
我有个问题。 我有一个巨大的c ++项目,我在几点改变以满足我的要求。 我加载了比预期更多的数据,并且在该程序的某个时刻,有一个新的向量分配了数据的大小乘以另一个数字。
vector = new real[data.size()*28];
在这里我收到错误消息:
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
因为我无法分配那么多空间。 我无法更改此向量,因为它在程序的许多不同部分中使用,并且(对我来说)可能不可能在此处将其余程序拟合到新定义中。
我能做什么,我可以使用这个向量,但我的大数据集?
顺便说一句:我使用eclipse,也许我可以增加在eclipse本身分配的可能空间的大小?
谢谢!
正如Encryptyon指出的那样(并且他应该得到信用),你需要将你的内存分配为一个非连续的块。 你可以使用std::deque
来做到这一点。
std::deque<float> v( data.size() * 28 );
您可以使用operator[]
访问任何成员。
real x = v[1000000];
你也可以迭代(部分)deque,好像它是一个std::vector
因为std::deque
的接口与std::vector
非常相似。 但是,你不能做的是&v[0]
(或c ++ 11中的v.data()
),因为容器的内部存储很可能是非连续的。
你不能分配那么多连续的ram,使用双端队列
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.