Segfault初始化简单的for循环

时间:2015-11-22 19:15:56

标签: c segmentation-fault

我必须在这里失去理智。我在第for(i = 0; i < N; i++) {行遇到了段错误。我从来没有遇到过这样的事情。这是完整的代码:

#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;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

首先:你已经将a,b和c声明为[N] [N]矩阵,但是你将它们初始化为好像它们是[N] [M]和[M] [P]矩阵。考虑N> M> P,不应该导致段错误,但目的不明确。

其次,如果您将defines替换为:

#define N 10
#define M 5
#define P 2

您的计划工作。这是因为局部变量ab存储在堆栈中,并且堆栈的大小有限。请查阅您的编译器和系统文档,以确切了解所施加的限制。

为避免此类问题,请使用malloc或等效函数分配内存,这样可以在堆上分配内存,但受限制较少。