>>762
extern char *p;
〜
p = (char *) malloc(size);
// 以下pもpのアドレスもプログラム内に一切登場せず

でメモリリークだろ。

これから実行されるプログラムから到達可能じゃないといけない。
変数かどうかは関係ない。(たとえばreturn malloc(〜);など)