core.exception.InvalidMemoryOperationError@(0)

Bayan Rafeh via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Jan 25 00:39:40 PST 2015


On Sunday, 25 January 2015 at 00:43:43 UTC, Vladimir Panteleev 
wrote:
> On Saturday, 24 January 2015 at 12:16:38 UTC, Bayan Rafeh wrote:
>> This problem is a tough one. I've been getting this error when 
>> I run my unittests, and apparently it is caused by attempting 
>> an allocation in the destructor from what little I could find 
>> online about the subject.
>>
>> The error is triggered once all my tests are complete, so I'm 
>> assuming the garbage collector is running before termination, 
>> but I tried placing logging messages in all my destructors and 
>> I didn't get anything, so none of them are being called.
>>
>> Is there any other possible reason to get this error?
>
> Hi,
>
> I created a wiki page which I hope will help you solve this 
> problem:
>
> http://wiki.dlang.org/InvalidMemoryOperationError
>
> Hope this helps.

Thank you very much, this will certainly be useful in debugging 
it.

> The allocations may be indirect. For example, formatting a 
> string to log a message may allocate. Try marking your 
> destructors as @nogc to see whether the compiler agrees.

I tried what you said and I think I see the problem. I managed to 
create an example program that duplicates the problem:


import std.stdio;

class A {
     string path;

     this(string p) {
         path = p;
     }
     ~this() {
     }
     void a(){}

     void b(){}
}

class B {
     A a;
     this() {
         this.a = new A("laladiv");
     }
     ~this() {
         delete a;
     }
}

void main() {
     B a = new B();
     B b = new B();
     delete b;
}


More information about the Digitalmars-d-learn mailing list