void* pointers get corrupted: D bug or misunderstanding?

Ali Çehreli acehreli at yahoo.com
Mon Jul 29 05:41:27 UTC 2019


On 07/28/2019 06:46 PM, Exil wrote:
> 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.

For completeness, more other valuable information is here:

   https://dlang.org/spec/interfaceToC.html

Ali


More information about the Digitalmars-d mailing list