Zitat von
alcaeus:
Ein Array ist eigentlich nur ein Pointer, der auf die Anfangsadresse der Elementreihe zeigt. Du setzt den Pointer auf nil. Wird nun danach nochmals SetLength aufgerufen oder auf das Array zuggriffen, so kriegst du eine ZV, da das Array irgendwo im Nirvana rumschwirrt.
Die drei Aufrufe
Code:
SetLength(clProgColors,0);
clProgColors:=nil;
Finalize(clProgColors);
machen letztendlich alle das Gleiche. Wenn man nil zuweist, dann wird nicht der Pointer auf nil gesetzt. Der Compiler weiß, dass es sich hier um ein dynamisches Array handelt und macht nichts weiter als den Code einzusetzen, der das dynamische Array leert.
Wenn man es im CPU-Fenster debuggt, dann landet man bei allen drei Methoden irgendwann in der Funktion @DynArrayClear.
Dann sieht man auch, dass die Variante mit dem nil zuweisen, die schnellste ist.