1

私は、Boost::dynamic_bitfield を Ruby で使用できるようにする小さな Ruby 拡張機能を C/C++ で作成しています。私のコードは完全にコンパイルされますが、拡張機能をロードしてクラスをインスタンス化しようとすると、segfault が発生します。

gdb を適切に利用して、エラーまたはエラーが発生している場所を見つけることができませんでした。Init_bitfield問題をor 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(size);へ 構造体とboost::dynamic_bitsetを初期化します。

于 2011-10-24T13:28:48.410 に答える