c++ - 分配新 vector 时的 std::bad_alloc - 我能做什么

标签 c++ eclipse memory-management bad-alloc

我有一个问题。 我有一个巨大的 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/

相关文章:

c++ - 使用带有参数 cin.get() 或 .getline() 的函数调用

css - 在 Eclipse-Java EE 上,如何更改 TreeView 中选定元素的颜色设置?

c++ - Qt 信号和槽混淆

c++ - 访问转换纹理的像素数据

c++ - 作为 Qt5 库的一部分进行编译时如何启用/禁用 WebKit 功能

java - 扩展 Eclipse View 部分的选项卡上下文菜单

java - 有没有人在巴克明斯特有真实的经验?

c - 使用带有动态数组的结构指针的内存分配 (realloc) 时出错

c - 如何在不释放内容的情况下释放指针?辅助变量

c++ - 为什么当新数组、调整 vector 大小和push_back到 vector 时会出现bad_alloc?