矢量存储限制的向量 - 获得"Microsoft C++ exception: std::bad_alloc at memory location 0x0031650C."错误
Vector of vector storage limitations - getting "Microsoft C++ exception: std::bad_alloc at memory location 0x0031650C." error
在c++中,我正在阅读几个大型网格数据集进行处理。最近,其中一个数据集甚至在我开始处理之前就破坏了我的代码。
数据集有5765个cols和5872行,总共有33852080个单元格。在单个向量的容量极限下,对吧?或不呢?我现在正在想办法。
试图将第2496个内部向量push_back放入原始向量时抛出异常。
代码如下:
slopeGrid.reserve(rows);
flowDirGrid.reserve(rows);
flowAccumGrid.reserve(rows);
tempGrid.reserve(rows);
inflowGrid.reserve(rows);
TWIgrid.reserve(rows);
for(int k=0; k<rows; k++)
{
elevation.push_back(*new vector<double>(cols));
ATB.push_back(*new vector<double>(cols));
Area.push_back(*new vector<double>(cols));
slopeGrid.push_back(*new vector<double>(cols));
flowDirGrid.push_back(*new vector<double>(cols));
flowAccumGrid.push_back(*new vector<double>(cols));
tempGrid.push_back(*new vector<double>(cols));
inflowGrid.push_back(*new vector<double>(cols));
TWIgrid.push_back(*new vector<double>(cols));
}
你有3400万个对象,对吧?如果这些对象足够大,我认为达到每个Windows 32位进程最大2g不会那么困难。
效果:
我仍然遇到内存异常时,已经删除了动态分配,并使用以下格式:
elevation.resize(rows, std::vector<double>(cols, NODATA));
但是,根据Tive的回答,我能够找到并遵循这个:
https://msdn.microsoft.com/en-us/library/wz223b1z.aspx然后它就能正常工作了
相关文章:
- 使用std::multimap迭代器创建std::list
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从持续时间构造std::chrono::system_clock::time_point
- std::具有相同基类的类的变体
- std::向量与传递值的动态数组
- 使用std::vector的OpenCL矩阵乘法
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- std::condition_variable::wait()如何评估给定的谓词
- 如何获取std::result_of函数的返回类型
- std::原子加载和存储都需要吗
- 将对象移动到std::shared_ptr
- 获取错误:在抛出"std::bad::alloc"的实例后终止调用 what(): std::bad_alloc
- "std::vector"在调整大小时引发"bad allocation"异常
- 成员函数 bad() 的 std::ftsream 用于检查
- 正在使用std::string而不是char*bad
- 在抛出 'std::bad _alloc' 的实例后调用终止 what(): std::bad_alloc 在 c++ 中
- What is Scala for: getline(), std::cin.eof(), std::cin.bad()