On Friday, 19 October 2018 at 02:04:37 UTC, Samir wrote:
I am working my way through the exercises in the "Programming in D" tutorial (http://ddili.org/ders/d.en/arrays.html). Why is the line assigning the length of the dynamic array required?

[...]


Without the line:

myArray.length = noValues;

I get the run-time error...

I would have thought that since this is a dynamic array, I don't need to pre-assign its length.

Even though the array is dynamic, it doesn't have infinite storage. So you either:

- preallocate required storage, like in that example code (note that it's not the same as making a fixed-size ('static') array: in your case you only learn what the required length is at run-time, as opposed to static arrays where you must know it at compile time)

- don't preallocate, but instead append new elements like this:

myArray ~= newValue;

The latter isn't a universally "good" advice: it may cause reallocation every time you do that. That's why it's almost always best to preallocate in advance if you do know the length, or use something like std.array.appender that attempts to reduce memory reallocation. I'm not familiar with Ali's tutorials, maybe he talks about the appender in some future examples.

Reply via email to