使用分配的矩阵时出现分段错误,我不明白为什么。此代码目前有效,并且不依赖于计算机
#include <stdlib.h>
void allocMatrix(int ***M, int n, int m) {
*M = (int**)malloc(n * sizeof(int));
int i = 0;
while(i<n) {
(*M)[i] = malloc(m * sizeof(int));
i++;
}
}
int main(void) {
int **mat;
int R, C;
R = 15;
C = 10;
allocMatrix(&mat, R, C);
int i,j;
for(i = 0; i < R; i++) {
for( j = 0; j < C; j++) {
*(*(mat+i)+j) = j+i*R;
}
}
#ifdef WIN32
system("pause");
#endif
}
我在Xcode中得到segmentation fault: 11 or EXC BAD ACCESS
。如上所述,仅发生在一些计算机上
答案 0 :(得分:4)
sizeof(int)
不能保证等于sizeof(int*)
,因此您分配的内存块很可能太小。写入未分配的内存是未定义的行为,有时可能会按预期工作,有时不会。