From: Craig Files Date: 2001-07-28T00:51:49+09:00 Subject: [ruby-talk:18641] Possible SWIG Ruby bug Hi, It seems that when using SWIG with Ruby, there is a bug that causes a destructor for an object to be called more than once. If an object is newed and deleted within C++, but a pointer to that object is returned to Ruby during execution of a Ruby program, the object is deleted twice (once in C++ and once in Ruby). The following code recreates the bug. The resulting core file shows the point of failure in the destructor for class Bar. Has anyone else encountered this bug when using SWIG? Is there a way around this problem? That is, we would like the ability to delete a object Bar if we create it in Ruby (i.e. bar = Bar.new()). ----------------------------------------- Foo.h class Bar { public: int * data; Bar() : data (new int) {} ~Bar() { delete data; } }; class Foo { private: Bar *V; public: Foo() : V(new Bar) {} ~Foo() { delete V; } const Bar *GetBar() { return V; } }; ----------------------------------------- Foo.i %module Foo %{ #include "Foo.h" %} class Bar { public : Bar(); ~Bar(); }; class Foo { public: Foo(); ~Foo(); const Bar *GetBar(); } ------------------------------------------- foo.rb require 'Foo' f = Foo::Foo.new() b = f.GetBar() puts "exiting" -------------------------------------------- output exiting test.rb:5: [BUG] Segmentation fault ruby 1.6.4 (2001-06-04) [i686-linux] Aborted Thanks, Craig -- ___________________________________________________________________________ Craig Files | / http://fccf0183l.ftc.agilent.com/~cfiles/ | __o / craig_files@agilent.com | \<, / ____________________________________________|_____()/ ()____/