【发布时间】: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