vector.resize()中的分配错误

Bad alloc in vector.resize()

本文关键字:分配 错误 resize vector      更新时间:2023-10-16

我在Visual Studio 2017(社区版(中尝试了以下C++代码:

vector <int> V;
V.resize(600000000);
for (int i = 0;i < 600000000;i++)
{
if (i % 10000000 == 0)cout << i << endl;
}

但得到:

异常:内存位置处的std::bad_alloc

我在属性(项目的(->链接器->系统中更改了堆保留大小、堆提交大小、堆栈保留大小和堆栈提交大小。此外,我在控制面板中将"所有驱动器的总分页文件大小"更改为100GB RAM(我有一个120GB RAM的虚拟机(。它没有起作用。

有没有办法把超过600000000个整数放到向量中?

确保编译的是64位二进制文件,而不是32位二进制文件。

600.000000整数是2.400.000.000字节(~2gb(,默认情况下对于32位二进制文件来说太多了。

如果您需要超过2gb的32位二进制文件,您可以在Visual Studio 中使用/LARGEADDRESSAWARE标志进行链接

编辑:正如重复数据删除器所提到的,该标志可能无法使此示例在32位中工作。最好的解决方案是构建一个64位二进制文件。