On Wed, Nov 19, 2014 at 03:47:03AM +0000, Maxime Chevalier-Boisvert via 
Digitalmars-d-learn wrote:
[...]
> I'm trying to explicitly free chunks of memory allocated with
> GC.malloc() in a destructor. This works fine while the program is
> running, but when the program terminates, it seems the GC calls all
> destructors in an arbitrary order. I then get a
> core.exception.InvalidMemoryOperationError because I'm trying to free
> memory that is already freed.
[...]

Yeah, it is well-known that relying on destructor calling order is a bad
idea. The GC makes no guarantees about what order destructors will get
called, if they get called at all. Also, calling GC allocation /
deallocation functions from inside a dtor is also a bad idea, since the
GC is not reentrant.

Unfortunately I don't have any good suggestions... I have been avoiding
depending on dtors in D because of the aforementioned issues (and more),
so I haven't had much experience in debugging dtor-related problems in
D.


T

-- 
An elephant: A mouse built to government specifications. -- Robert Heinlein

Reply via email to