繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM