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@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.

Reply via email to