Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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;

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

“var=”foo“语句只是为了说明问题。当调用此语句的次数足够且分配了足够的内存时,GC启动,程序崩溃

begin

  running = true

  # Main update loop
  while (running == true)

    var = "foo"

    sleep 0.01

  end

end