Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#22

AW: Move und FillChar bei strings.

  Alt 10. Jun 2014, 09:26
Bei Angabe eines ungültigen Index, darf sich die Liste überhaupt nicht verändern.
Das Fillchar muss die Stringvariable löschen, nicht den Inhalt des Strings.
Delphi-Quellcode:
procedure TMyStringList.Delete(const Index: integer);
begin
  if (Index < 0) or (Index >= FCount) then
    raise Exception.Create(...);

  Dec(FCount);
  Finalize(FItems[Index]);
  if Index < FCount then
    Move(FItems[Index + 1], FItems[Index], (FCount - Index) * SizeOf(string));

  FillChar(FItems[FCount], SizeOf(string), 0);
end;
Auch der Aufruf Finalize und die abschießende Zuweisung eines leeren Strings kann problematisch sein, wenn der Stringpointer vorher nicht auf nil gesetzt wird (FillChar).
Finalize verringert eigentlich nur den Referenzzähler des Strings auf den die Variable bisher verweist (string wird freigegeben bei RefCount = 0).
Wird aber danach der Variablen wieder ein Wert zugewiesen und die Variable zeigt noch auf den alten String, wird das erneut versucht.
  Mit Zitat antworten Zitat