【问题标题】:Bad memory allocation in vector向量中的错误内存分配
【发布时间】:2018-11-09 08:05:24
【问题描述】:

看看这段代码:

int main()
{
    int m;
    cin >> m;
    vector<int> cnt(m +1,0);
}

现在如果我取 m=999999298(这是一个 int,对吗?)。为什么我在向量中收到“错误的内存分配”错误?

【问题讨论】:

  • 您正在构建 32 位应用程序吗?您正在分配 4GB 内存,每个应用程序可能只允许您使用 2GB。
  • 如果你取一个小得多的值怎么办?那它行得通吗?如果是这样,那么它停止工作的阈值是多少?
  • sizeof (int) 现在通常是 4(32 位)。 999999298 * 4 = 3999997192 字节 = 3906247.26 KB = 3814.69 MB = 3.72 GB。如果您在 32 位平台上,这可能是不可分配的。即使在 64 位上,也可能没有足够的连续内存可用。
  • @Scheff:这在理论上当然是可行的,但它需要 40 亿个先前的分配,并且它们之间有 3.71 GB 的空洞。
  • @MSalters 好的。忘记我所说的关于 64 位的内容。 OP 没有提到操作系统和平台,但提到了 bad-alloc 问题。所以,它可能是一个 32 位平台。 (如果 OP 可以添加此信息会更容易。)

标签: c++ vector memory-management


【解决方案1】:
vector<int> cnt(m +1,0);

vector 的声明尝试分配 999999299 个 integer 元素,每个元素的值都为 0。考虑到整数的大小为 4 个字节,这大约是 3.7 GB 的内存。看来您的应用程序不允许使用那么多内存。这就是为什么您会收到“错误的内存分配”错误。

至于为什么会有这样的限制,你可以阅读这个question 及其答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    相关资源
    最近更新 更多