LimeChat for OSX には、かなり低い確率で解放済みのメモリにアクセスしてしまう問題があって、ずっと原因がわからずに困っていた。 今日、たまたま RHG を読み直していたら、あっ、これだっ!!!という項目を見つけた。 http://i.loveruby.net/ja/rhg/book/gc.html GC対策のvolatile スタック上のVALUEはGCが面倒を見てくれると書いた。 それならば ローカル変数としてVALUEを置いておけば そのVALUEは確実にマークされるはずである。 しかし現実には最適化の影響で変数が消えてしまうことがある。 例えば次のような場合は消える可能性がある。 VALUE str; str = rb_str_new2("..."); printf("%s\n", RSTRING(str)->ptr); このコードではstr自体にアクセスしていないので