struct node *hoge(struct node* a)
{
struct node *b;
    b = a;
    a = NULL;
 free( b );
 return a;
}

free関数の形式を調べてみるとvoid free(void *ptr);と書いてありました
ttp://www.bohyoh.com/CandCPP/C/Library/free.html

つまり、上記の関数を実行すると、引き数で渡されたポインタaがNULLを代入される前に指していた領域を開できるということでしょうか?

自分で調べてみて「たぶんあっているな。」とは思ってもどうしても確信できなくて不安になってしまいます。みなさんはそんなことありませんでしたか?(このレス二つ目の疑問です)