int i,j
char *p[3]

for(i=0 ; i<3 ; i++) p[i]=(char*)malloc(sizeof(char)*5);
for(j=0 ; j<3 ; j++) p[j]=(char*)realloc(p[j],sizeof(char)*7);

これで正常終了したときはfree回数は3回?
もしj=2(realloc時)に確保失敗した場合、free回数は2回? 3回?