*p = (char*)malloc(1);

をした後

*p = 0;

とやったら1バイトメモリリークするんじゃないか?