Crash on Windows with core.stdc.stdlib.free()

Chris via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Nov 12 06:11:35 PST 2014


On Wednesday, 12 November 2014 at 12:58:19 UTC, ketmar via 
Digitalmars-d-learn wrote:
> On Wed, 12 Nov 2014 12:40:30 +0000
> Chris via Digitalmars-d-learn 
> <digitalmars-d-learn at puremagic.com> wrote:
>
>> The following causes the DLL to crash on Windows:
>> 
>> Input: immutable(short)* data (immutable because in separate 
>> thread).
>> // Later
>> core.stdc.stdlib.free(cast(short *)data);
>> 
>> (short* data is provided by the C library, where the memory is 
>> allocated)
>> 
>> On Linux it works fine and never crashes, in the Windows DLL 
>> it randomly causes an access violation in memory (both read 
>> and write). Note that it doesn't crash immediately, it goes on 
>> for a while, but sooner or later it crashes. If I comment out 
>> this line, everything works fine. However, if I don't free the 
>> memory, I'll have a memory leak. Any hints/advice/guesses?
> seems that you are using two different allocators here. one is 
> that
> comes with DLL and other that comes with D. i bet they either 
> using
> different runtimes, or C runtime is doesn't know about another C
> runtime in DLL.
>
> on GNU/Linux there is only one runtime (most of the time), so 
> there
> is no problem with different allocators.

That makes a lot of sense. Hm. How can I work around this problem 
then? What's involved are a C-dll and a D-dll that uses the C-dll 
and is loaded into a Python program. To complicate things further 
short* data is passed to C by D. short* data is then allocated 
and populated in C.



More information about the Digitalmars-d-learn mailing list