1

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

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

在这里我收到错误消息:

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

因为我不能分配那么多空间。我无法更改此向量,因为它在程序的许多不同部分中使用,这将非常困难并且(对我而言)可能无法将程序的其余部分与此处的新定义相适应。

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

顺便说一句:我使用 eclipse,也许我可以增加 eclipse 本身分配的可能空间的大小?

谢谢!

4

2 回答 2

2

正如 Encryptyon 指出的那样(他应该得到信任),您需要将内存分配为非连续块。您可以使用std::deque.

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

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

real x = v[1000000];

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

于 2014-06-25T09:44:11.103 回答
1

你不能分配那么多连续的内存,使用双端队列

于 2014-06-25T07:45:30.137 回答