山本です。

>>|確保した順番に関係なく、オブジェクトIDの小さいほうから free 関数を
>>|呼んでいるように見えます。つまり
>>|
>>|  A(0x03) -> B(0x02) -> C(0x04)
>>|
>>|のように参照されていると、B が解放されて A の free 関数が解放済みの B
>>|にアクセスしてしまうと。
>>
>>そういうことです。で、それは仕様だと思ってます。
>
>ううむ、仕様ですか。

すみません、過去ログですでに議論されてました(汗)[ruby-dev:11915]

>解放関数では Ruby オブジェクトを操作できない、ということでしょうか。
>それならそれで明快な気もします。(zlib はバッファに RString を
>使っているので、C のヒープを使うべきなんでしょうか)

Rubyオブジェクトの io に触らないといけないので、それじゃだめですね。