マクロにしなくてもp=free(p),NULL;でいいじゃん?