Hi Paul, Thanks for the clarification. I guess then the actual problem may be even more complicated than what has been discussed, as in my case, not all the inner C struct's are wrapped by an RObject (such as a struct that contains a datum of type BigNum). (Yes, yes, probably I should have used an "independent" C library that provides arbitrary-precision, hash, etc...) Regards, Bill ============================================================================ Paul Brannan <pbrannan / atdesk.com> wrote: >> But at any level, if that object that holds references to the inner >> objects was not created using Data_Wrap_Struct(), there is no way for it >> to mark the inner objects, is there? > I think so. > When I speak of creating an object, I mean allocating the memory for the > object's data (when I think of an object, I think of a C++ object, not > the entity that the VALUE is pointing to). > When I speak of registering an object with the garbage collector, I mean > wrapping it with a Ruby object. The gargage collector then knows it is > there and knows that the object must at some point be freed. > It's confusing, because there are two objects (the RObject and the > object that is being wrapped), and those objects act as a single unit. > I can use clearer wording if I have better words to use. > Paul