たしかこれはgccの話だったと思うけど
実装上はmallocからもらうアドレスの手前に次の割り当てた領域の先頭アドレスが入ってて
全体としてリストだかヒープだかを作ってるんじゃなかったっけ
んでfreeはそのアドレスを順繰りに辿っていって記録されたアドレスを更新することで割り当てられた領域を解放する
だからアドレスが記録されている場所を書き換えるとリンクが壊れるのでセキュリティホールになってるとかどーとか