Wundert mich aber, dass Delphi so läuft.
Wie sollte er/es denn sonst laufen?
Der Iterator geht vom ersten bis zum letzten Element durch die Liste.
Wenn der Iterator beim ersten Element ist, man dieses löscht, dann rutscht das eben noch zweite Element vor auf den Platz des ersten Elements.
Jetzt fordert man vom Iterator das nächste Element an
und landet beim anfänglich dritten Element.
In .net wirft der Iterator eine
Exception wenn sich die zugrunde liegende Collection verändert hat. Das ist eine sehr praktische Sache.
Und ja, das Rückwärtslaufen über den Index ist hier das Mittel der Wahl.