1

我正在用 C/C++ 编写一个小的 Ruby 扩展,它使 boost::dynamic_bitfield 在 Ruby 中可用。我的代码可以完美编译,但是在加载扩展并尝试实例化类时,我遇到了段错误。

我无法正确利用 gdb 来查找错误或错误发生的位置。我想我将问题缩小到Init_bitfieldor 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

4

1 回答 1

0

解决方案是添加:

new(bf) BitField();

到 BitFieldNew(大小);初始化结构和 boost::dynamic_bitset。

于 2011-10-24T13:28:48.410 回答