Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TStringList lebt ewig!! (https://www.delphipraxis.net/66522-tstringlist-lebt-ewig.html)

Benedikt1983 30. Mär 2006 20:53


TStringList lebt ewig!!
 
Hallo zusammen!

Ich habe ein Problem mit einer Stringlist, die als Feld folgenden records definiert ist:

Delphi-Quellcode:
TQuestion = record
    Question: WideString;
    Answer: record
      Words: TStringList; // <- da ist sie!
      Number: Real;
    end;
    AnswerType: TAnswerType;
    Difficulty: Integer;
  end;
Es gibt eine Routine InitializeQuestion, die Standard-Werte einsetzt und sie StringListe erzeugt:

Delphi-Quellcode:
procedure TDlgQuestion.InitializeQuestion;
begin
  Question.Question := '';
  Question.Answer.Number := 0;
  Question.Answer.Words := TStringList.Create;
  Question.AnswerType := atSentence;
  Question.Difficulty := 70;
end;
Wenn Question.AnswerType auf einen anderen Wert geändert wird, dann soll - falls die Liste nicht gebraucht wird - diese freigegeben werden.

Delphi-Quellcode:
Question.AnswerType := AnswerType;
  if (Question.AnswerType = atNumber) then
    if Assigned(Question.Answer.Words) then
      Question.Answer.Words.Free;
Soweit so klar. Aber nach dem Aufruf von
Delphi-Quellcode:
Question.Answer.Words.Free;
kann man die StringListe lustig weiter verwenden... Sie exisiert noch! Aber warum??? Sie sollte doch :pale:

Was muss ich machen?

Vielen Dank
bene

sakura 30. Mär 2006 20:55

Re: TStringList lebt ewig!!
 
Der Speicher wurde anderweitig noch nicht vergeben und daher scheint es, als würde es noch funktionieren. Sobald aber der Speicher neu belegt wird fliegt Dir das Ganze um die Ohren :shock: Nutze Delphi-Referenz durchsuchenFreeAndNil.

...:cat:...

Benedikt1983 30. Mär 2006 20:59

Re: TStringList lebt ewig!!
 
FreeAndNil ist keine Methode von TStringList. Natpülich kann ich die Liste anders auf nil zeigen lassen, aber eigentlich sollte ich nach einem Aufruf von TStringList.Free einen Zugriffsfehler bei der nächten Zeile :=

Delphi-Quellcode:
StringList.Add('foo');
bekommen. Oder?? Irgendwas ist da komisch...

Danke trotzdem!
Bene

Sascha L 30. Mär 2006 21:02

Re: TStringList lebt ewig!!
 
du musst ja auch FreeAndNil(deineListe) machen ;)

Benedikt1983 30. Mär 2006 21:04

Re: TStringList lebt ewig!!
 
Ah so! Vielen Dank.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz