Nicole, an array is a local (managed) variable, its not created with new or create, the compiler will free up any memory used when it goes out of scope. The compiler is your friend.
This sentence seems extremely important to me, although I do not understand it in full.
I work a lot with dynamic arrays.
At the moment I administrate them in blocks because SetLenth(myArray(Langth(myArray)+1) or so had large performance penalties. I am not happy with this complex block creation. But it is the best I found.
On destroy I learned to destroy them one level by the next one nested. So I removed the content of the array basically, then the array which had hold it, then the above one...
After I checked this I found, that it is slllowwwww. The performance grew better, if I left the basic figures alone and just wrote about the 'main' array (which holds all others):
SetLength(myArray,0);
I cannot remember, what I tried to clean up. This went from Delphi 7 to XE3 and so on. I cannot remember what all was "not allowed" and "pointer to Nil" keeping my busy if I cleaned up an already empty array.
The short question after the long text (I hope, it is short!):
How to clean up dynamic arrays for best style?