簡體   English   中英

Ruby擴展代碼中的Segfault

[英]Segfault in Ruby Extension Code

我正在用C / C ++寫一個小的Ruby擴展,它使Ruby中的boost :: dynamic_bitfield可用。 我的代碼可以完美地編譯,但是在加載擴展並嘗試實例化該類時,我遇到了段錯誤。

我一直無法正確利用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;
}

BitField定義如下:

typedef struct _bitfield {
        boost::dynamic_bitset<> data;
} BitField;

該代碼主要受本文啟發: http : //ruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html

解決方案是添加:

new(bf) BitField();

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM