Hallo Pseudemys Nelsoni,
Strings sind intern als Referenzen auf Speicherbereiche implementiert. Der Referenzwert "
nil", also eine "ausgenullte" Referenz, hat dabei die besondere Bedeutung, eines "leeren" strings. Zwar ist die Delphi-Implementierung relativ geschickt, so dass nur bei Bedarf Strings kopiert werden und stattdessen mit Referenzen gearbeitet wird. Das Konzept ist dabei vollkommen transparent realisiert, so dass der Entwickler nicht mitbekommt, dass bei der Arbeit mit Strings ständig Speicher alloziiert und wieder freigegeben wird, trotzdem ist der Compiler nicht allwissend.
Solltest Du den Bereich einer String-Referenz (eine String-Variable) einfach ausnullen, gilt dieser String zwar als leer, der bisher referenzierte Speicherbereich ist allerdings verloren. Das vorgehen entspricht folgendem beim Umgang mit Objekten:
Delphi-Quellcode:
myObject:= TMyClass.Create;
myObject:= nil; // !lost reference -> memory leak
Verwende zum Dereferenzieren solcher Bereiche stattdessen die speziell für diesen und ähnliche Fälle konzipierte Routine
Finalize und anschließend eine Routine zum ausnullen.
Der folgende Aufruf hat bei mir mit Deinem Datentyp erfolgreich funktioniert:
Delphi-Quellcode:
Finalize(Rankings);
FillChar(Rankings, SizeOf(Rankings), 0);