"theoretisch" sieht es so aus, als wenn es richtig wäre.
@StringList: Dort bleibt der Zeiger immer gleich und nur
in dem Objekt ändert sich die Liste.
Beim Array wird der Speicher immer mal wieder verschoben, weswegen sich dort der Zeiger ändert, auf den sein Pointer zeigt, aber durch den Pointer sollte man ja immer richtig direkt auf die Variable zugreifen.
Rein logisch meinst du doch bestimmt
SetLength(Elements^, Length(Elements^)+1);
oder
SetLength(Elements^, Succ(Length(Elements^)));
aka "um 1 vergrößern" ?