From: nobu.nakada@... Date: 2003-06-04T22:13:51+09:00 Subject: [ruby-list:37750] Re: rb_ary_push なかだです。 At Wed, 4 Jun 2003 20:22:32 +0900, EMOTO Masahiko wrote: > プログラム中で配列の大きさ(サンプルではN、M)が小さい時は > 動作するのですが、大きくすると落ちてしまいます。 スタック上のGCから保護される範囲から、aryとary2が外れているのだ と思います。 実際のコードや最適化の具合によって条件は変わりますが、一般的に ruby_init()を呼ぶ関数と同じかそれよりも(コールグラフで)上の関数 では、VALUEを使うのは危険です。rb_ary_new()以降を別関数に分ける とうまくいくかも知れません。 あるいは、Init_stack()をより上位のアドレスで呼び出すとか。 int main(int argc, char **argv) { int i,j; VALUE ary,ary2; ruby_init(); Init_stack((VALUE*)&argc); /* <---- ここ */ ruby_init_loadpath(); ary = rb_ary_new(); for(i=0;i