Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.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 简单for循环初始化时的SEGFULT_C_Segmentation Fault - Fatal编程技术网

C 简单for循环初始化时的SEGFULT

C 简单for循环初始化时的SEGFULT,c,segmentation-fault,C,Segmentation Fault,我一定是疯了。我在(I=0;I

我一定是疯了。我在(I=0;I
行中遇到了一个segfault。我从未遇到过类似的情况。下面是完整的代码:

#include <stdio.h>
#include <time.h>

#define N 2400
#define M 2000
#define P 500

int main() {    
    int a[N][N];
    int b[N][N];
    int c[N][N];

    int i, j;

    // Initialize matrix A
    for(i = 0; i < N; i++) {
        for(j = 0; j < M; j++) {
            a[i][j] = j-1+2;
        }
    }

    // Initialize matrix B
    for(i = 0; i < M; i++) {
        for(j = 0; j < P; j++) {
            b[i][j] = i-j+1;
        }
    }
}
#包括
#包括
#定义N 2400
#定义M 2000
#定义P 500
int main(){
INTA[N][N];
INTB[N][N];
国际c[N][N];
int i,j;
//初始化矩阵A
对于(i=0;i
首先:您已将a、b和c声明为[N][N]矩阵,但您将它们初始化为[N][M]和[M][p]矩阵。考虑到N>M>p,这不应导致segfault,但目的不明确

其次,如果将
定义替换为:

#define N 10
#define M 5
#define P 2
程序正常运行。这是因为局部变量
a
b
存储在堆栈上,并且堆栈的大小受到限制。请查阅编译器和系统文档以准确了解施加的限制


为避免此类问题,请使用
malloc
或等效函数分配内存,该函数在堆上分配内存,限制较小。

大多数编译器将局部变量(包括完整数组)放在堆栈上。堆栈空间有限,在Windows上默认堆栈空间仅为一兆字节。您的
a
b
c
数组各有21MB……因此您应该使用
malloc()
calloc()
为这些数组分配内存。或者只是减少元素计数以适应堆栈。实际上,您是在
inta[N][N]处获得它的
如果您在linux下,请在正在使用的shell上运行
ulimit-s unlimited
,运行程序可执行文件以避免堆栈耗尽。@simpel01或者,如果您不打算递归调用
main()
,请声明数组
静态