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