erstmal ein Code-Schnipsel aus einem Programm, dass ich übernommen habe, und ich brauche ein bisschen Unterstützung für das Verständnis:
Code: Alles auswählen
var
begList : TList;
PString : PStr; // pointer auf String
begin
begList.Create;
begList.clear;
aString := '';
// aString zusammen bauen
For i:=0 to nCount-1 do
aString := aString+ '3' + #32;
// String in Liste
New(Pstring);
PString^ := aString;
begList.Add(PString);
// tue was neues mit dem String
aString := '';
aString := aString + 'ingendwas';
// Liste wieder freigeben
For i:=begList.Count-1 downto 0 do
begin
PString := begList.Items[i];
Dispose(PString);
begList.Delete(i);
begList.Free;
end;
end;
Das erscheint mir schon eher kompliziert. Geht das einfacher? Muss ich tatsächlich den aString umspeichern, um zu vermeiden, dass anschließend der String in der TList geändert wird; der String aString wird schließlich im folgenden weiter verwendet, mit neuem Inhalt beschrieben, und wieder an die TList angehängt? Die bereits angehängte Information soll nicht verloren gehen.
Zum Schluss wird der Speicher wieder freigegeben, was auch eher kompliziert geschieht: erst werden alle Einträge einzeln gelöscht, entfernt und der entsprechende Speicher freigegeben. Zum Schluss wird die TList freigegeben. Reicht es nicht, nur TList.Free aufzurufen oder bleiben dann Speicherleichen zurück (Memory Leak würde ich natürlich vermeiden wollen - das ganze Konstrukt wird gute 20 mal angewendet

Wäre schön, wenn Ihr mich erleuchten könntet. Ich versuche, den Code zu entwirren und zu vereinfachen, wo es geht.
Danke,
Photor