C语言中二维数组声明中的歧义

re3*_*3el 6 c arrays malloc pointers

我已经用以下格式定义了数组,但显然该程序仅在CASE B中正常工作.

案例A:

int **M1;
M1 = (int **)malloc(m * sizeof(int *));
for (int i=0; i<m; i++){
    M1[i] = (int *)malloc(d * sizeof(int));
} 
Run Code Online (Sandbox Code Playgroud)

案例B:

int (*M1)[m] = malloc(sizeof(int[m][d]));
Run Code Online (Sandbox Code Playgroud)

我在CASE A中遇到了分段错误.可能是什么原因?

Dee*_*epu 3

以下代码在gcc编译器中编译时没有错误或警告,

    int **M1,i;
    M1 = (int **)malloc(5 * sizeof(int *));
    for (i=0;i<5;i++){
        M1[i] = (int *)malloc(2 * sizeof(int));
    }
    M1[0][0]=111;
    M1[0][1]=222;
    printf("\n%d %d",M1[0][0],M1[0][1]);
Run Code Online (Sandbox Code Playgroud)

作为输出给出111 222

问题可能出在代码的其他地方。