Einzelnen Beitrag anzeigen

general-e

Registriert seit: 1. Jun 2005
Ort: Kamen
5 Beiträge
 
Delphi XE Enterprise
 
#7

AW: TStringList - AddObject-Problem

  Alt 3. Sep 2015, 09:06
Hallo,

auch, wenn das Thema schon seeeehhhr alt ist, wollen wir ja für alle spätern Leser eine Lösung bereitstellen:

In ermittle_geschwister wird eine Stringlist mylist erzeugt, an result zugewiesen und wieder freigegeben. Da Objekte immer als Referenz übergeben werden, wird damit auch das result freigegeben, da es die Stringliste nur einmal gibt.
Du musst das Freigeben des Ergebnisses immer außen machen:

Delphi-Quellcode:
function TMensch.ermittle_geschwister: TStringlist;
var
    i: Integer;
begin
    IF self.Kinder.Count = 0 THEN
    BEGIN
      exit;
    END;
    TRY
       result := TStringList.Create;
       FOR i:=0 TO self.Kinder.Count-1 DO
          result .Add(self.Kinder.Strings[i]);
    Except ON E: Exception DO
    END;
end;

procedure TForm1.Button1Click(Sender: TObject);
var geschwister:Stringlist;
begin
     Vater := TMensch.Create('Steffen');
     Vater.Maennlich := true;
     Mutter := TMensch.Create('Kathrin');
     Mutter.Maennlich := False;
     Kind := Mutter.erzeuge_kind(Vater,'Philipp');
     geschwister := Vater.ermittle_geschwister;
     if assigned(geschwister) then
     try
       showmessage(geschwister.Text);
     finally
       freeAndNil(geschwister);
     end;

end;
  Mit Zitat antworten Zitat