对于 C++ 中大于 41260 的值,二维向量初始化失败

2D Vector initialization fails for values greater than 41260 in C++

我注意到当我增加方形二维向量数组的维数时,我开始得到

Process finished with exit code 137 (interrupted by signal 9: SIGKILL)

我很好奇为什么会发生这种情况,以及失败的第一个行数和列数是否可以给我更多信息(人们会期待一个或两个幂或其他东西......)。

好吧,我开始猜测,得出的结论是 N > 42160 开始出现错误,这意味着 N = 42160 仍然可以,但是 N = 42161 突然给出 SIGKILL.

给出错误的整个代码:

size_t N = 41261;
std::vector<std::vector<int>> matrix(N, std::vector<int>(N));
std::vector<std::vector<int>> matrixCopy(N, std::vector<int>(N));

你知道那个号码吗?我做错了什么?

实际上您在堆栈中分配了非常大的向量(至少 42161 * 42161 * 4 字节=7.1 GB),这是因为您收到了 sigkill(我认为更像是 std::bad_alloc),因为您没有足够的内存我认为如果你在堆顶部分配它也会失败。您应该根据需要分配内存。我们在 OS 中有一个概念,如果程序要分配非常大的内存,它可能会导致系统的某些重要部分出现故障并导致系统崩溃,这就是 OS 将终止该程序的原因。

阅读OOM

退出代码 137 内存不足,这意味着您的程序占用了太多内存,操作系统不得不终止它。 您可以减小大小,remove/replace 个您不需要的条目,或者自己分配和释放,以免程序占用太多 space.