C言語の質問です。

ある関数内でmallocし、その関数から抜ける前にfreeしたいのですが、
関数内には条件分岐でreturnする部分が数ヶ所あります。この場合、どう書くのが
一番きれいなのでしょうか?

具体的には
---------------------------
int func()
{
void *p=NULL,*q=NULL;
....
if(...)
return a;
....

p=malloc(...);

....
if(...)
return b;
....
q=malloc(...);
....
/* 続く */