Segfault when writing to module-scope dynamic array
Adam D. Ruppe
destructionator at gmail.com
Mon Nov 18 12:42:26 UTC 2019
On Monday, 18 November 2019 at 12:31:10 UTC, rombankzero wrote:
>> char[] array = new char[5];
It is almost always wrong to new things at module, class, or
struct scope, since this create it in the static data segment.
My guess is the compiler is seeing a static string and
incorrectly putting it in the read-only segment with the other
strings, and then writing to it thus triggers that segfault.
just a guess, and if correct, this is a dmd bug.
But I'd still recommend doing the `new` inside a function/module
constructor anyway. That takes the static aspect out entirely and
prevents some surprising bugs (right now the new is run at CTFE,
not a huge deal here but with like classes it surprises a lot of
people as the default pointer is shared between instances!)
> I assumed it would heap-allocate a mutable dynamic array before
> main runs
but yeah this is NOT what it does. It runs new at *compile time*
which means that `array` variable is pointing to static memory,
it is not heap allocated at all.
More information about the Digitalmars-d-learn
mailing list