此问题在此处已有答案:
Segmentation fault on large array sizes(7个答案)
Getting a stack overflow exception when declaring a large array(8个答案)
9天前关闭。
我正在运行一个c代码,它需要一个大小为2000*2000的矩阵。我使用了malloc和直接分配。但在编译时,它会显示“分段失败(核心转储)"。我在Linux系统的终端上运行它,128 GB内存
第一个代码如下
#include<stdio.h>
int main(int argc,char ** argv){
int N = 2000;
int A[N][N];
}
字符串
第二个是
#include<stdio.h>
int main(int argc,char ** argv){
int i,j;
int Nx = 2000;
int Ny = 2000;
int npoint = Nx*Ny;
double** A =(double**) malloc(npoint*sizeof(double));
for (j = 0;j< npoint;j =j+1){
A[j] = (double*)malloc((npoint)*sizeof(double*));
}
for( j= 0;j<npoint;j++){
for (i=0;i<npoint;i++){
A[i][j] = 0;
}}
}
型
使用gcc进行编译,第一个直接显示分段失败(核心转储),但另一个启动,但在一段时间后被终止。
1条答案
按热度按时间lp0sw83n1#
所以首先,你应该为指向大小为sizeof(double*)的Nx个指针的数组的指针分配内存。下一步,对于数组中的每个指针,您应该分配大小为Ny * sizeof(double)的内存。下面是它的代码。
字符串