Я пишу небольшое расширение Ruby на C / C ++, которое делает boost :: dynamic_bitfield доступным в Ruby.Мой код прекрасно компилируется, но при загрузке расширения и попытке создать экземпляр класса я получаю ошибку segfault.
Я не смог правильно использовать 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 / документы / ProgrammingRuby / html / ext_ruby.html