![](/img/trans.png)
[英]Avoid Segfault in C++ code if user redefines initialize() in Ruby with Rice
[英]Segfault in Ruby Extension Code
我正在用C / C ++寫一個小的Ruby擴展,它使Ruby中的boost :: dynamic_bitfield可用。 我的代碼可以完美地編譯,但是在加載擴展並嘗試實例化該類時,我遇到了段錯誤。
我一直無法正確利用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;
}
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.