Das Array ist folgendermaßen aufgebaut:
Delphi-Quellcode:
Sortierung = Record
iRegalPlatz : Integer; // Regalplatz-Nr.
iPosiPlatz : Integer; // Kistenplatz-Nr. im Regalplatz
iKistePlatz : Integer; // Kisten-Nr.
iStueckPlatz : Integer; // Stückzahl in der Kiste
Datum : TDateTime; // Einlagerungsdatum
Barcode : String; // Inhalt des Strings des Barcodes
end;
FeldPlatz : Array of Sortierung;
Also funktionieren tut es insgesamt schon. Nur eben wenn AIndex 0 ist, bzw. das Feld die Länge 1 hat, tritt der Fehler auf.
Und du hast nicht $H-/$LONGSTRINGS OFF, d.h. Barcode ist ein referenzgezählter Typ? Dann
verursacht das Move Probleme, selbst wenn du sie nicht sofort um die Ohren geknallt kriegst. Überleg mal: Angenommen Feldplatz hat noch zwei Elemente und du rufst Loesche_Array_Element(0) auf. Dann wird der Record Feldplatz[1] auf Feldplatz[0] ge-move-t, d.h. Feldplatz[0].Barcode und Feldplatz[1].Barcode verweisen auf den gleichen String, haben aber trotzdem nur Referenzzähler 1. Beim nachfolgenden Aufruf von SetLength wird Feldplatz[1] finalisiert, was insbesondere den Referenzzähler von Feldplatz[1].Barcode dekrementiert und, da 0 rauskommt, den String entsorgt. Dummerweise zeigt Feldplatz[0].Barcode jetzt auf einen freigegebenen Speicherbereich. Das kracht nicht zwangsweise sofort, ist aber trotzdem übel.