我有一个问题。 我有一个巨大的 c++ 项目,我在几个点上进行了更改以满足我的要求。 我加载了比预期更多的数据,并且在该程序的某个时刻,分配了一个新 vector ,其大小为数据数乘以另一个数。
vector = new real[data.size()*28];
这里我得到错误信息:
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
因为我不能分配那么多空间。 我无法更改此 vector ,因为它在程序的许多不同部分中使用,并且(对我而言)很难并且(对我而言)可能无法使程序的其余部分适应此处的新定义。
我该怎么做才能使用这个 vector ,但将我的大型数据集放入其中?
顺便说一句:我使用 eclipse,也许我可以增加在 eclipse 本身中分配的可能空间的大小?
谢谢!
最佳答案
正如 Encryptyon 指出的(他应该获得荣誉),您需要将内存分配为非连续 block 。您可以使用 std::deque
执行此操作。
std::deque<float> v( data.size() * 28 );
您可以使用operator[]
访问任何成员。
real x = v[1000000];
您还遍历(部分)双端队列,就好像它是一个 std::vector
因为 std::deque
的接口(interface)非常相似到 std::vector
。但是,您不能做的是 &v[0]
(或 c++11 中的 v.data()
),因为容器的内部存储很可能是非-连续的。
关于c++ - 分配新 vector 时的 std::bad_alloc - 我能做什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24402895/