On 04.04.2017 16:54, Ryan Joseph wrote: > >> On Apr 4, 2017, at 9:46 PM, Sven Barth via fpc-pascal >> <fpc-pascal@lists.freepascal.org> wrote: >> >> SetLength() allocates a single block of memory, cause array access is >> ordinary pointer arithmetic. However if you have an array of array then >> the first array stores a pointer to each sub array. >> >> E.g. the following would be valid, too: >> >> === code begin === >> >> var >> arr: array of array of Integer; >> begin >> SetLength(arr, 10, 10); > > “then the first array stores a pointer to each sub array.” > > Could you illustrate this is code? I don’t think I’m understanding this > exactly like it’s represented in memory. There’s only one “sub array” in this > 2x2 array so how does that look in memory?
Let's look at a smaller array, let's say 3 x 4, then it would look like this: arr = @arr[0], @arr[1], @arr[2] arr[0] = 0, 0, 0, 0 arr[1] = 0, 0, 0, 0 arr[2] = 0, 0, 0, 0 Essentially you'd have four arrays, namely the outer array arr which basically contains pointers to the other arrays, and the inner arrays which are each three separate four element arrays. So all four of these arrays could reside at completely different locations of the heap. Is this clearer? Regards, Sven _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal