>>112
聞きたいのはこういうことか?

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);
if(p[j]==NULL) /*  p[j]==NULLのとき、p[j]は解放する必要があるか */
}

だとしたら、p[j]==NULLなのに解放する必要はないに決まっているだろう
それとも失敗したときはNULLなのか、mallocで確保したままなのかってことか?
それなら上みたらわかるようにNULLになってる
reallocはいったん解放したあとに、大きさの違うものを確保していると考えてよい