2011-10-22 73 views
1

我在C/C++中編寫了一個小的Ruby擴展,使得boost :: dynamic_bitfield在Ruby中可用。我的代碼完全編譯,但是當加載擴展並試圖實例化類時,我得到了段錯誤。Ruby擴展代碼中的段錯誤

我還沒有能夠正確利用gdb來查找錯誤或它發生的地方。我想我把問題縮小到了Init_bitfieldbf_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

+0

@sidyll,看看代碼,它是C++,但由於extern「C」而帶有一些C。在投票前閱讀。 – halfdan

回答

0

解決的辦法是添加:

new(bf) BitField(); 

BitFieldNew(size);初始化struct和boost :: dynamic_bitset。