void* pointers get corrupted: D bug or misunderstanding?

Exil Exil at gmall.com
Mon Jul 29 01:46:27 UTC 2019


On Sunday, 28 July 2019 at 18:32:24 UTC, Federico Santamorena 
wrote:
> A stupid example can be passing a D object using the void* 
> user_data GTK argument, passing a extern(C) callback function 
> to GTK, and then inside that callback calling a extern(D) 
> function that accepts a void*.
>
> I already tried using Variant, but pointers to Variant get 
> corrupted too, so it's useless.

Where is the "D object" allocated? Haven't seen anyone mention 
it, but the way the GC works, it has to know about the memory it 
needs to scan to look for an object.

So if you pass an object allocated with the GC then pass it to 
GTK, the GC isn't going to know about the memory GTK has 
allocate. The kind of problem can happen that you mention, it 
deallocates the object because it doesn't think it is used 
anymore.


More information about the Digitalmars-d mailing list