Ein dynamisches Array hat erstmal eine Länge von 0 und bevor man da was reinmachen kann, muß man den nötigen Speicher reservieren.
Wenn man das nicht macht, dann greift man praktisch auf nicht existierenden Speicher zu und es knallt.
Außerdem hätte die "genaue" Fehlermeldung sehr geholfen, denn darauf erkannt man recht leicht, daß kein Speicher reserviert wurde. (Zugriffsverletzung bei Adresse $000000xx ... denn 0 = nil)
SetLength