こんにちは、クボタです。
Cのモジュールが持つ配列を ruby に渡したいのですが
うまく行きません。
やりたい事は、C側にある配列データを、ruby 側から
それを取り出すCの拡張モジュールを呼び出して参照
する。 という事なのですが...。
ソースは以下の通りです。
----< test2.c >--------------------
#include "ruby.h"
static VALUE arybuf;
static VALUE
func_test2(obj)
VALUE obj;
{
VALUE testbuf[] = {1,2,3,4,5,6,7,8,9,0};
arybuf = rb_ary_new4(10, testbuf);
return arybuf;
}
void
Init_test2()
{
VALUE mTEST2 = rb_define_module("TEST2");
rb_define_module_function(mTEST2, "test2", func_test2, 0);
}
---------------------------------
----< test.rb >---------------------
require 'test2'
include TEST2
print "test start\n"
ary = TEST2::test2() # Cの配列を取り出したつもり
ary.each{|i|
print "ary = ", i,"\n"
}
---------------------------------
この test.rb を実行すると、
ary = 1
ary = 2
: :
ary = 9
ary = 0
と表示されるのを期待していましたが、以下のように表示
されます。
ary = 0
ary = true
ary = 1
ary = nil
ary = 2
test.rb:7: [BUG] Segmentation fault
ary = IOT trap/Abort
期待した動作をさせるには、どこを修正すればよいかご指導
お願いします。