Ich benutze seit einer Ewigkeit diesen Codeschnipsel und er funktioniert mit x86.
Mit x64 funktioniert er genau 2x und dann bekomme ich eine ungültige Zeigeroperation. Der Input ist immer der gleiche. Ein String mit mehreren Teilen geteilt durch |, die ich mit Explode in ein Array packe. Das klappt alles bis ich den ersten Eintrag löschen möchte. Dann kommt der Fehler.
Delphi-Quellcode:
procedure DeleteArrayIndex(var AArray: TArray<string>; AIndex: Integer);
begin
if AIndex > High(AArray) then
Exit;
if AIndex < Low(AArray) then
Exit;
if AIndex = High(AArray) then
begin
SetLength(AArray, Length(AArray) - 1);
Exit;
end;
Finalize(AArray[AIndex]);
System.Move(AArray[AIndex + 1], AArray[AIndex], (Length(AArray) - AIndex - 1) * SizeOf(string) + 1);
SetLength(AArray, Length(AArray) - 1);
end;
if StringParts[0] = 'HEADER' then
DeleteArrayIndex(StringParts, 0); // Fehler
Das Array ist immer mindestens 3 Einträge lang.