はじめに 表題のとおりでよく考えれば当たり前なのですが、ちょっとハマったので書いておきます。 要約すると、Rubyの拡張ライブラリを作る場合、用意されているALLOC()などのメモリ確保マクロを使わないときには、ちゃんと自分でGCを呼ぶ必要がある、という話です。 環境 Ruby 1.9.2p180 (2011-02-18) [i686-linux] 本題 こんなライブラリがあったとして // foo_lib.hpp #include <stdlib.h> typedef struct Foo { double bar[1000000]; } Foo; Foo* create_foo() { Foo* foo = (Foo*)malloc(sizeof(Foo)); if (foo == NULL) throw "<Memory allocation failed>"; return foo