Ruby脚本在调用垃圾收集器时导致分段错误 我在用C++代码嵌入Ruby脚本的工作中遇到了麻烦。我注意到,当程序运行一段时间时,ruby脚本有一个分段错误。经过一些实验后,我将这个问题追溯到垃圾收集器。当程序分配足够的内存以调用垃圾收集器时,它会触发此segfault。使用GC.start可以获得相同的结果。禁用垃圾收集可以解决这个问题,但是运行垃圾收集非常重要,所以我不能像那样禁用它。这是一个已知的bug,还是我的代码有问题 这里是C++代码< /p> #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;
“var=”foo“语句只是为了说明问题。当调用此语句的次数足够且分配了足够的内存时,GC启动,程序崩溃Ruby脚本在调用垃圾收集器时导致分段错误 我在用C++代码嵌入Ruby脚本的工作中遇到了麻烦。我注意到,当程序运行一段时间时,ruby脚本有一个分段错误。经过一些实验后,我将这个问题追溯到垃圾收集器。当程序分配足够的内存以调用垃圾收集器时,它会触发此segfault。使用GC.start可以获得相同的结果。禁用垃圾收集可以解决这个问题,但是运行垃圾收集非常重要,所以我不能像那样禁用它。这是一个已知的bug,还是我的代码有问题 这里是C++代码< /p> #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;,c++,ruby,garbage-collection,segmentation-fault,C++,Ruby,Garbage Collection,Segmentation Fault,“var=”foo“语句只是为了说明问题。当调用此语句的次数足够且分配了足够的内存时,GC启动,程序崩溃 begin running = true # Main update loop while (running == true) var = "foo" sleep 0.01 end end
begin
running = true
# Main update loop
while (running == true)
var = "foo"
sleep 0.01
end
end