Supported answer: you don't, it has infinite lifetime and you're claiming it is immutable, but then trying to pull the memory out from under it! The supported solution is simply to let the garbage collector manage it.

But..

//GC.free(str_ptr.ptr); // Error: function core.memory.GC.free (void* p) is not callable using argument types (immutable(char)*)


If you must call the function though, you can simply `cast(void*) str.ptr`, or use `char[]` up above instead of `string` when declaring it, so it has a mutable pointer to begin with. Since you are using .dup anyway, both declarations are equally legal.

        string str = "aaa";
        writeln(str.length); // print 3

        str = "bbbb";
writeln(str.length); //print 4 expected 3+4=7 [aaa][bbbb] (2 blocks)
        GC.free(cast(void*) str.ptr);
        writeln(str.length); //print 4

Reply via email to