Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对于C+;中大于41260的值,2D向量初始化失败+;_C++_Memory_Multidimensional Array - Fatal编程技术网

C++ 对于C+;中大于41260的值,2D向量初始化失败+;

C++ 对于C+;中大于41260的值,2D向量初始化失败+;,c++,memory,multidimensional-array,C++,Memory,Multidimensional Array,我注意到,当我增加一个正方形2D向量数组的维数时,我开始得到 Process finished with exit code 137 (interrupted by signal 9: SIGKILL) 我很好奇为什么会发生这种情况,以及第一批失败的行和列是否会给我提供更多的信息(人们可能会期待一个或两个或更多的功率…) 好吧,我开始猜测并得出结论,N>42160的错误开始出现,这意味着N=42160仍然可以,但是N=42161突然给出了SIGKILL 给出错误的整个代码: size_t N

我注意到,当我增加一个正方形2D向量数组的维数时,我开始得到

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));
size\u t N=41261;
std::向量矩阵(N,std::向量(N));
std::vector矩阵copy(N,std::vector(N));

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

事实上,您在堆栈中分配了非常大的向量(至少42161*42161*4字节=7.1 GB),这是因为您收到了sigkill(我认为更像std::bad_alloc),因为您没有足够的内存,我认为如果您在堆的顶部进行分配,它也会失败。你应该按照你需要的大小分配内存。我们在操作系统中有这样一个概念,如果程序要分配非常大的内存,它可能会导致系统的一些重要部分崩溃,并导致系统崩溃,这就是为什么操作系统会杀死这个程序


读取。

退出代码137内存不足,这意味着您的程序占用了太多内存,操作系统不得不终止它。
您可以减小大小,删除/替换不需要的条目,或者自行分配和解除分配,以避免程序占用太多空间。

41261 x 41261
int
s需要约6.5GB的ram。你有足够大的内存来处理这个问题吗?我不知道,但是向量也有内存限制。它在不同的体系结构上是不同的。C++可以有向量,但不必使用它,就像无限。memory@NathanOliver这难道不会导致一个
std::bad_alloc
而不是一个SIGKILL吗?(尽管如此,听起来还是最有可能的解释)。@NathanOliver将第二个矩阵乘以2,您需要大约13GB的内存。哦,RAM可能是问题所在。我没有意识到这一点,因为当我使用单个阵列时,我的大小可以达到百万,这一切都很好,但对于二维阵列,N得到平方,然后将第二个矩阵乘以2。你说得对。谢谢