bad_alloc ::`scalar在尝试创建470mb大小的矢量时删除析构函数'(unsigned int)

时间:2017-04-17 08:46:02

标签: c++ stdvector

在这种情况下最有趣的是,昨天它的工作还可以。 我不知道是什么原因引起了麻烦

size = 480 000 000;
std::vector<char> result(size);

3 个答案:

答案 0 :(得分:1)

Vector尝试分配所需大小的连续内存块。根据系统内存碎片,可能没有0.5Gb块可用,并且内存分配失败。

答案 1 :(得分:0)

你分配了很多连续的内存,所以如果内存不足就会得到bad_alloc。

答案 2 :(得分:0)

  

在这种情况下最有趣的是,昨天它的工作还可以。

std::vector的内容并未存放在空气中;它们占据了计算机的内存。显然,计算机中的内存情况一直在变化。自昨天以来可用的总可用空间变得更小,或者现在有更多的碎片,所以即使总可用空间超过470MB,也没有任何地方没有免费的连续 470MB点。

或许std::deque可以在短期内优雅地解决问题:

  

std::vector相反,不存储双端队列的元素   连续地:典型的实现使用单独的序列   分配固定大小的数组,[...]

当然,正如相同的文档所解释的那样,这有一些缺点。