------------------
#include <stdio.h>
#include <stdlib.h>
int main(void){
int df;
int height;
int (*p)[3];
scanf("%d",&height);
p=(int (*)[3])calloc(height*3,sizeof(int));
if(p==NULL)
printf("失敗\n");
else{
int i,j;
for(i=0;i<height;i++)
for(j=0;j<3;j++)
p[j]=0;
for(i=0;i<height;i++)
for(j=0;j<3;j++)
printf("p[%d][%d]=%d\n",i,j,p[j]);
free(p);
}
return 0;
}------
のピープ領域を確保するp=(int (*)[3])calloc(height*3,sizeof(int))の部分の引数を
p=(int (*)[3])calloc(height*3,sizeof(*p))
p=(int (*)[3])calloc(height,sizeof(int (*)[3]))
と変更したとき、上は問題ないのですが、下についてはpを解放する時点でエラーが発生します(確保する時点では問題なく動作します)。確保している領域は変わらないと思うのですが、なにがまずいのか、教えていただけると助かります。よろしくお願いいたします。
