Einzelnen Beitrag anzeigen

choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#7

Re: Alle Elemente eines Arrays löschen?

  Alt 16. Dez 2003, 15:32
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);
gruß, choose
  Mit Zitat antworten Zitat