1
我在C/C++中編寫了一個小的Ruby擴展,使得boost :: dynamic_bitfield在Ruby中可用。我的代碼完全編譯,但是當加載擴展並試圖實例化類時,我得到了段錯誤。Ruby擴展代碼中的段錯誤
我還沒有能夠正確利用gdb來查找錯誤或它發生的地方。我想我把問題縮小到了Init_bitfield
或bf_new
/bf_init
。
完整的源:http://pastebin.com/qLkMGYqq
static VALUE bf_new(VALUE self, VALUE size)
{
VALUE argv[1];
Check_Type(size, T_FIXNUM);
BitField *bf = BitFieldNew(NUM2INT(size));
VALUE tdata = Data_Wrap_Struct(self, 0, free, bf);
argv[0] = size;
rb_obj_call_init(tdata, 1, argv);
return tdata;
}
位域定義如下:
該代碼主要是啓發本文通過:http://ruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html
@sidyll,看看代碼,它是C++,但由於extern「C」而帶有一些C。在投票前閱讀。 – halfdan