抛出 "bad_alloc" 的最常见原因是什么?

What is the most common reason that "bad_alloc" is thrown?

是否有更频繁的内存相关错误抛出 bad_alloc?我明白这意味着内存分配失败了,但是在代码中导致这种情况的最常见错误是什么?

编辑:其他评论者指出了一些有趣的场景。为了完整起见,我将它们添加到我的回复中。

情况 1:运行 内存不足

我的理解是,只要运算符 new 和 new[] 无法为对象或变量分配内存,就会抛出 bad_alloc。如果您新建了一堆对象并忘记在它们超出范围之前删除它们(即,您的代码疯狂地泄漏),就会发生这种情况。

案例二:一举分配大量内存

分配大块内存(如 1000 x 1000 x 1000 双精度矩阵的情况)可能会失败,因为它需要一个该大小的块。

可能有几个空闲内存块可用,但其中 none 个足够大。

案例 3:将无效值传递给 new[]

bad_alloc 如果传递负值作为其参数,则会抛出。