分段故障:分配矩阵时为11

时间:2016-03-16 19:52:41

标签: c pointers matrix segmentation-fault exc-bad-access

使用分配的矩阵时出现分段错误,我不明白为什么。此代码目前有效,并且不依赖于计算机

#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。如上所述,仅发生在一些计算机上

1 个答案:

答案 0 :(得分:4)

sizeof(int)不能保证等于sizeof(int*),因此您分配的内存块很可能太小。写入未分配的内存是未定义的行为,有时可能会按预期工作,有时不会。