Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
21. Okt 2014
Genau das hatte ich auch schon auf der Zunge :-D
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
21. Okt 2014
Wie schon erwähnt, ruft SetLength intern DynArraySetLength auf. Diese Methode ist rekursiv und arbeitet auch mit mehrdimensionalen Arrays. Ein arr: array of array of Integer wird also mit einem Aufruf von SetLength(arr, 10, 20) ebenso mit Nullen initialisiert wie ein eindimensionales.
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
20. Okt 2014
Das Verhalten ist auch schon in Delphi 7 so (ältere kann ich gerade nicht überprüfen). Ich gehe jetzt mal einfach davon aus, daß es in den zwischen D7 und XE7 liegenden Versionen ebenso ist. Natürlich kann niemand garantieren, daß dieses Verhalten in zukünftigen Versionen wieder anders implementiert wird, aber die Wahrscheinlichkeit ist eher gering. Sollte es wirklich mal soweit sein, wird man...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
20. Okt 2014
Das ist schlichtweg falsch!
SetLength ruft intern DynArraySetLength aus System.pas auf. Dort steht dann (in XE7 Zeile 33931-33933) folgender Code:
// Set the new memory to all zero bits
if newLength > oldLength then
FillChar((PByte(p) + elSize * oldLength)^, elSize * (newLength - oldLength), 0);