>858
もともと不正なメモリアクセスは別問題。それは単にバグ。
>818を読む限り、単に解放済みポインタとそうでないポインタで
条件分けしたくないだけなら、NULLを代入すればいい。
NULLは解放済みを示すマークで、free(NULL)が素通りという
仕様はそのためにある。

ループのある枝分かれリストみたいのを解放するケースを
考えてるんだろうけど、そこまで来ると各ノードを直接freeで
解放しにいくのは無理でしょう。削除マーク付けといて、
後でGCで一括解放するしかない。