我正在用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
答案 0 :(得分:0)
解决方案是添加:
new(bf) BitField();
到BitFieldNew(大小);初始化struct和boost :: dynamic_bitset。