Ok, A little knowledge goes a long ways.
After some testing this is what happens and it's something that people should be aware of.
With a Dynamic Array you can get the pointer to in two ways.
APointer := @ADynArray; This points to a pointer which points to the actual data.
APointer := @ADynArray[0]; This points directly to the start of the data.
So, if you were to use SetLength on a Dyn Array to a different value than what it already is, it does recreate the array but It also creates a new memory start.
This means each time you resize the array for example, larger, it needs to rebuild it and most likely will put it elsewhere from where it currently resides.
So it looks like one needs to be variable careful to ensure you use the address of the pointer and not the address of the actual start of data because once you reset the size differently it may move it elsewhere in memory.
Thus, the old Indirect addressing...
I wonder how many bugs are hard to find because of this ?
Does the compiler spit out a hint indicating address may change if array is resized ,whenever it sees a Pointer:= @ADynArray[?]
If it does not, maybe it should?