调用垃圾收集器时,Ruby脚本会导致分段错误

时间:2014-03-05 05:49:46

标签: c++ ruby garbage-collection segmentation-fault

我在制作嵌入在C ++代码中的ruby脚本时遇到了麻烦。我注意到,当程序运行一段时间后,ruby脚本会出现分段错误。经过一些实验,我将这个问题追溯到垃圾收集器。当程序分配足够的内存以便需要调用垃圾收集器时,它会触发此段错误。 GC.start可以实现相同的结果。禁用垃圾收集修复了这个问题,但是运行它是很重要的,所以我不能像这样禁用它。这是一个已知的错误,还是我的代码出了问题?

这是c ++代码

#include <ruby.h>

int main()
{

//Initialize ruby
ruby_init();
ruby_init_loadpath();

//Start main loop in ruby
int status;
rb_load_protect(rb_str_new2("./scripts/main.rb"), 0, &status);

//Handle errors
if (status) 
{
    VALUE rbError = rb_funcall(rb_gv_get("$!"), rb_intern("message"), 0);
    std::cerr << StringValuePtr(rbError) << std::endl;
}

//Terminate ruby interpreter
ruby_finalize();
exit(0);

return 0;

}

这是ruby脚本“main.rb”

begin

  running = true

  # Main update loop
  while (running == true)

    var = "foo"

    sleep 0.01

  end

end

'var =“foo”'语句只是为了证明问题。当这个语句被调用足够多次并且分配了足够的内存时,GC就会启动并且程序崩溃。

0 个答案:

没有答案