くさかべせんせえ、下は九九を表示するプログラムで、両方とも
コンパイラは通るのですが、

#define ROWS 9
#define COLUMNS 9

1)
main()
{
int i;
int j;
int **k = (int **)malloc(sizeof(int) * ROWS);

for(i=0;i<ROWS;i++)
{
for(j=0;j<COLUMNS;j++)
{
k[j] = (int *)malloc(sizeof(int));
}
}

for(i=0;i<ROWS;i++)
{
for(j=0;j<COLUMNS;j++)
{
k[i][j] = (i+1) * (j+1);
printf("[%d x %d = %2d]",(i+1),(j+1),k[i][j]);
}
printf("\n");
}

return 0;
}
は実行されるのですが、

2)
main()
{
int i;
int j;
int **k = (int **)malloc(sizeof(int) * ROWS);
for(i=0;i<ROWS;i++)
{
for(j=0;j<COLUMNS;j++)
{
k[j] = (int *)malloc(sizeof(int));
k[i][j] = (i+1) * (j+1);
printf("[%d x %d = %2d]",(i+1),(j+1),k[i][j]);
}
printf("\n");
}

return 0;
}
は実行時エラーが出て止まります。

なんでですか?