On Monday, 25 April 2022 at 02:07:50 UTC, Ali Çehreli wrote:
>      import core.memory: GC;
     GC.free(GC.addrOf(cast(void *)(i.ptr)));
That is wrong because you did not allocate that address yourself.

Hmm? The GC did allocate here(?)

On 4/24/22 17:26, Salih Dincer wrote:

>    MEM.free(i.ptr);
>    // You don't need to addrOf(cast(void*)i)

Wrong.


Good point about i.ptr but that free() does not or should not do anything because it is "memory not originally allocated by this garbage collector":

  https://dlang.org/phobos/core_memory.html#.GC.free

Well... maybe it was allocated by that garbage collector and may be it points to the beginning of an allocated block but we don't know that. I wouldn't call free() on an array's memory.

Ali

And if it was, the freeing must be done with `GC.addrOf` or it will fail with larger arrays.

You will need the GC address to free the block. That is what `__delete` actually does - which was patched back recently, reported by Adam: https://issues.dlang.org/show_bug.cgi?id=21550

Reply via email to