Segfault в коде расширения Ruby - PullRequest
       15

Segfault в коде расширения Ruby

1 голос
/ 23 октября 2011

Я пишу небольшое расширение 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

1 Ответ

0 голосов
/ 24 октября 2011

Решение было добавить:

new(bf) BitField();

в BitFieldNew (размер); для инициализации структуры и boost :: dynamic_bitset.

...