我正在尝试使用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))
时失败了,这有点奇怪。
答案 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]));