Ruby扩展代码中的段错误
Segfault in Ruby Extension Code
我正在用C/c++编写一个小的Ruby扩展,使boost::dynamic_bitfield在Ruby中可用。我的代码确实完美编译,但是当加载扩展并试图实例化类时,我得到了一个段错误。
我还没有能够正确地利用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
解决方案是添加:
new(bf) BitField();
BitFieldNew(大小);初始化struct和boost::dynamic_bitset
相关文章:
- 为什么PyImport_ImportModule python 3.7.2 中出现段错误?
- 为什么在访问 vtkRenderWindow 的"交互器"变量时会发生段错误?
- 全局向量导致 C++ 程序结束时出现段错误
- 为什么重载运算符<<打印特征类成员会导致段错误?
- 更改条件段错误
- 使用 TTF_RenderText() 加载字体时获取段错误 TTF_OpenFontRW()
- 注册对对象工厂的调用会导致段错误
- pthread_create在构造函数段错误中
- Nanoflann发现邻居提出段错误
- C++ 中的构造函数、继承、堆栈、堆、this-pointer 和段错误
- 具有unique_ptr的 CRTP 会导致段错误
- 增强纤维work_stealing屏障会导致段错误
- 当我返回指向结构的指针向量时出现段错误
- C++为什么我的代码没有爆炸/段错误?
- Pthread段错误,使用指向main中变量的指针
- C++ 模板中的段错误
- 相当于Windows/MSVC上的段错误?
- 为什么我的 LLVM JIT 实现出现段错误?
- 为什么访问我的引用捕获变量会导致我的 lambda 函数出现段错误?
- 为什么自删除的全局 Vulkan 实例仅在添加层时才导致段错误?