Announcement

Collapse
No announcement yet.

TStrings/TStringList: Probleme mit Funktion

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • TStrings/TStringList: Probleme mit Funktion

    Hi, Anfänger braucht Hilfe:
    Ich möchte eine Funktion erstellen in der ich eine Variable vom Typ TStrings als Funktionswert zurückliefere. Nur funktioniert das nicht. Ich habe
    verschiedenes aus- probiert, aber es will einfach nicht funktionieren. Was mache ich falsch?

    Bei folgendem Code steht am Schluss nur 'Hi' in der ersten Zeile von Memo1. Das heisst, es werden anscheinend keine Daten uebergeben:

    function GetDate:TStrings;
    var MemoList:TStrings;
    x:longint;
    begin
    MemoList:=TStringlist.create;
    MemoList.Add('Hallo');
    MemoList.Add('Thom');
    result:=MemoList;
    MemoList.free;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    var TestListe:TStringlist;
    begin
    TestListe:=TStringlist.Create;
    TestListe.addstrings(GetDate); TestListe.add('Hi');
    Memo1.Lines:=TestListe; { Memo1:TMemo }
    TestListe.free;
    end;

  • #2
    Dein Problem ist, daß du mit MemoList.Free die Stirngliste in deiner Funktion freigibst. Da bei allen Klassen die von TObject abgeleitet sind (damit auch TStrings) nur mit Referenzen gearbeitet wird, bedeutet die Anweisung: result := MemoList nur, daß Du einen Zeiger auf die Liste aus der Funktion zurückerhältst. Durch den Aufruf von MemoList.Free gibst Du die Stringliste frei, und auch der zurückgegebene Zeiger zeigt nur noch auf einen Speicherbereich, auf dem wahrscheinlich nur noch überreste der Stringlist liegen!

    Lösung: Übergebe als Parameter eine schon erzeugte StringList!

    procedure GetDate(MemoList: TStrings); begin MemoList.Add('Hallo'); MemoList.Add('Thom') end

    Comment


    • #3
      Test:
      begin<br>
      programmcode<br>
      programmcode<br>
      end

      Comment

      Working...
      X