我试图用称为细胞的对象填充二维向量(817乘577).这些单元格具有一组成员值(浮点数,其他向量等).在某个时刻程序停止并抛出错误"vector
.这是单元格的类定义和完整的循环:
struct cell { int x; int y; int country; vectorpopO; vector popS; vector Rainfall; double Cropland; vector outm; vector inm; vector AgeMaleFemale; vector AgeMaleFemaleMortality; double Fertility; }; vector > cells; void fillCells(dataserver D) { cout<<"start filling"< > output(rows,vector (columns,X)); cout<<"start loop"< | 谷歌搜索了一下我发现sizeof(cell)乘以向量中的单元格数量应该小于vector :: max_size()
sizeof(cell)是144 - > 144*817*577 = 67882896
max_size是268345455
那时候所有的细胞都不应该有足够的空间,或者我错过了什么?提前致谢!
一些额外的信息:
在Windows 7 64bit上运行,使用Visual Studio 2010进行编译,32位
关于max_size的信息实际上来自这里: stl"vector
太长了"
由于我没有足够的代表评论,所以你得到它作为答案.
错误文本听起来像你在Windows机器上 http://msdn.microsoft.com/en-us/library/2af6btx2%28v=vs.80%29.ASPX
而且我认为这与调整大小有关,因为创建一个太大的向量会抛出bad_alloc(在linux上,所以在windows上可能会有所不同).
尝试并将所有调整大小的调用包装在一个
try { // resize call here } catch (Exception &e) { std::cerr << e.what() << std::endl << "Some text that identifies the line" << std::endl; }