在C中定义大型动态2D阵列时程序停止

时间:2017-06-20 17:29:08

标签: c

我正在尝试使用malloc定义两个动态二维数组,这里是代码(我知道M = 118和N = 186):

bar/

数组Cf分配内存没有问题。但是,当涉及到Ct时,我的程序崩溃了。我调试了代码,发现int **Cf; Cf = (int **) malloc(M * sizeof(int *)); for (i = 0; i < N; i++) Cf[i] = (int *) malloc(N * sizeof(int)); Ct[i] = (int *) malloc(N * sizeof(int))时失败了,这有点奇怪。

1 个答案:

答案 0 :(得分:1)

关键问题:使用了错误的范围。应该是<M,而不是<N@xing

建议对引用的对象使用sizeof而不是类型。更容易编码,审查和维护。

请注意,不需要演员表。 @Some programmer dude

int **Cf = malloc(sizeof *CF * M);
assert(Cf);

//           M, not N
// for(i=0;i<N;i++){
for(size_t m=0; m < M; m++){ 

    printf("%zu\n", m);
    Cf[m] = malloc(sizeof *(Cf[m]) * N);
    assert(Cf[m]);
} 

代码也使用m代替i来帮助明确m索引与M一致。

使用calloc()

// int **Cf = malloc(sizeof *CF * M);
int **Cf = calloc(M, sizeof *CF);

    // Cf[m] = malloc(sizeof *(Cf[m]) * N);
    Cf[m] = calloc(N, sizeof *(Cf[m]));