Invalid memory operation during allocation with `new`

Steven Schveighoffer schveiguy at gmail.com
Mon Jan 13 16:02:06 UTC 2020


On 1/13/20 4:34 AM, Per Nordlöw wrote:
> On Sunday, 12 January 2020 at 17:36:23 UTC, Adam D. Ruppe wrote:
>> Of course that doesn't help the case when you don't know the rule and 
>> don't even think to call it.......
> 
> Thanks. I checked and @nogc-qualified all the class destructors defined 
> in my project. Without finding any potential problems. Any other 
> suggestions on how to trace this problem?

Finding where this is happening is a really difficult problem. Not only 
because there is no stack trace (I believe this is because the invalid 
memory operation error cannot allocate any GC memory, and there are very 
small parts of the stack trace printing code that allocate), but because 
it is invariably happening inside a GC collection -- so the error is far 
away from where you allocated (sometimes the conditions that trigger the 
dtor to allocate are hard to figure out from looking at the object when 
it's destroyed).

I actually had a problem in my vibe.d code where the error didn't 
display until the system was shutting down. Figuring out where it was 
involved defining the extern(C) function onInvalidMemoryOperationError 
(I think if you define this in your code, it overrides the runtime 
library's version), so I could do some diagnostics, and set a breakpoint.

Try starting there and see if you can find why the IMO is happening.

https://github.com/dlang/druntime/blob/c85dea29cb721ec76af6793076aa93e2f62a23da/src/core/exception.d#L535

-Steve


More information about the Digitalmars-d-learn mailing list