矢量无效的分配大小

时间:2012-08-27 20:23:28

标签: c++ stl vector size std

当我尝试创建并调整向量大小来保存最大项目数(vector :: max_size())时,我在运行时遇到调试错误:

  

“无效的分配大小:429467292”

我想知道为什么你不能调整大小,如果max_size()应该返回向量中的最大项目数...

vector<int> vc;
vc.resize(vc.max_size());

我还尝试在VS2010中启用LARGADRESSAWARE:On,但这没有帮助。想知道这是否是一个正确的thoguth ...

任何人都有线索?

1 个答案:

答案 0 :(得分:5)

max_size()是向量可以存储的绝对最大元素数。使用默认分配器,通常为std::numeric_limits<std::size_t>::max() / sizeof(T)。也就是说,它是您可能创建的最大类型的数组。

但是,您实际上永远无法分配那么大的数组。程序加载的模块占用了程序的一些地址空间,每个线程的堆栈也是如此。您可能在程序中有其他动态分配的对象(由您或运行时分配)。这些都有助于解决空间碎片问题,这意味着可用地址空间的最大连续块远小于可用地址空间的总量。

简而言之,实际上无法分配vectormax_size()元素。