分段错误:分配矩阵时为 11

Segmentation Fault: 11 when allocating a matrix

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

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

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