p がfree()されてないのに、また
p = malloc(・・・);
と、新しいメモリを確保してしまうことがあるから、

if (p) free(p);
p = malloc(・・・);

とチェックを入れてからmalloc()するってこと?