free((char *)f)は嘘。もしくは古い処理系の場合でしょ。voidがなかったころはchar*で代用していたらしいから。でも古かったら引数チェックなんて行われないはずだけどなぁ・・・