1. Gib mal den Pointer der Tstringlist mit const (statt var) über. Ich bin mir zwar nicht sicher, ob das wirklich einen Unterschied macht. Ich finds besser.
2. Stell dir vor du erstellst die Liste an Adresse A.
Dann übergibst du diese Adresse an Result (also steht in Result A drinn). Soweit ist alles klar. Jetzt löschst du die liste mit lst.free. Result zeigt immer noch auf A, aber dort steht nix mehr drinn.
--> Lass mal das Löschen(freigeben) weg. Das machst du besser nachdem du das Result in der aufrufenden Funktion verarbeitet hast.
Besser ist noch du benutzt von anfang an Result:
Delphi-Quellcode:
function TBauteilListe.GetLines: TStringlist;
...
begin
Result := TStringList.Create;
Result.Clear; //ist denk ich nicht zwingend notwendig
Rekursiv(FRoot,Result);
//free übernimmt die aufrufende Funktion
end;
...
//Aufrufende Funktion:
var ergebnis:TStringlist;
begin
ergebnis:=getlines;
// mit ergebnis arbeiten
ergebnis.free;
end;
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.