![]() |
FastIniFiles Memory Leaks
Hallo
Bin auf FastIniFiles ( ![]() Das Problem: Beim Beenden des Programms gibt es Memory Leaks. Testcode:
Delphi-Quellcode:
Leaks:
uses
FastIniFiles; procedure TForm1.FormCreate(Sender: TObject); begin with TFIniFile.Create('C:\...\test.ini') do try (*........*) finally Free; end; end; Zitat:
Delphi-Quellcode:
Warum denn? Das Ini File wird ja wieder freigegeben und sobit der Stream auch??
constructor TFIniFile.Create(const FileName: string; CommentChar: Char = '#');
var Stream: TStream; begin //... Self := Create(Stream); Stream.Free; end; Zudem gibt es noch etliche andere Leaks. Vermutlich in den Destruktoren. Wer findet noch welche? Genügt z.B das Finalize oder braucht es noch ein for i := Low(Values) to High(Values) do Values[i].Free; ?
Delphi-Quellcode:
destructor TFIniSection.Free;
var i: Integer; begin Name := ''; Finalize(Values); inherited Free; end; |
Re: FastIniFiles Memory Leaks
Hallo API,
ich kenne jetzt nicht FastIniFiles, aber ich könnte mir vorstellen wenn es sich um eine Class handelt, dass man sie nicht mit free freigibt, sondern mit destory. Bis bald Chemiker |
Re: FastIniFiles Memory Leaks
.Free ist ein Prozedur, die auf <>nil prüft und dann destroy aufruft, .Free ist also mindestens equivalent, wenn nicht gar vorzuziehen ggü. destroy
|
Re: FastIniFiles Memory Leaks
Hallo,
wer programmiert denn so schlimm ;)
Delphi-Quellcode:
oder mit dem with
procedure TForm1.FormCreate(Sender: TObject);
var FIniFile: TFIniFile; begin FIniFile:= TFIniFile.Create('C:\...\test.ini'); try finally FIniFile.Free; end; end;
Delphi-Quellcode:
Schönes Bsp., wie man sich mit with Probleme bereiten kann
procedure TForm1.FormCreate(Sender: TObject);
begin with TFIniFile.Create('C:\...\test.ini') do begin try (*........*) finally Free; end; end; end; (liegt aber nicht am with, sondern an der Programmierung).
Delphi-Quellcode:
constructor TFIniFile.Create(const FileName: string; CommentChar: Char = '#');
var Stream: TStream; begin //... Create(Stream); Stream.Free; end; Heiko |
Re: FastIniFiles Memory Leaks
Ich glaube eher es liegt hier: Self := Create(Stream);
Das passiert eigentlich implizit im constructor - mit anderen Worten: Es wird ein Objekt erstellt, an Self zugewiesen und dann der Kontruktor aufgerufen. Wenn der jetzt noch ein Objekt erstellt und wieder an Self zuweist dann geht jede Referenz auf das erste verloren, aber der Speicher wird nicht freigegeben. |
Re: FastIniFiles Memory Leaks
Zitat:
@hoika: Was ist denn daran falsch?
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var FIniFile: TFIniFile; begin FIniFile:= TFIniFile.Create('C:\...\test.ini'); try finally FIniFile.Free; end; end; |
Re: FastIniFiles Memory Leaks
Hallo,
Delphi-Quellcode:
destructor TFIniSection.Free;
var i: Integer; begin Name := ''; Finalize(Values); inherited Free; end;
Delphi-Quellcode:
destructor TFIniSection.Destroy;
var i: Integer; begin Name := ''; Finalize(Values); inherited Destroy; end; Heiko |
Re: FastIniFiles Memory Leaks
Delphi-Quellcode:
Destroy ist der Destructor !
destructor TObject.Destroy;
procedure TObject.Free; Und beim Destructor nie das Override vergessen ! |
Re: FastIniFiles Memory Leaks
@hoika: Bei beiden Varianten wird der
destructor TFIniFile.Free(SaveChanges: Boolean = true); aufgerufen. Zudem: Warum kann man das nicht mit with machen? Danach muss überall ein FIniFile. geschrieben werden, der Code wird unschön (/größer)
Delphi-Quellcode:
var
FIniFile: TFIniFile; begin FIniFile:= TFIniFile.Create('C:\...\test.ini'); try if FIniFile.SectionExists('Section') then begin FIniFile.EnterSection; ... := FIniFile.ReadString('Value1'); end; FIniFile.... FIniFile..... FIniFile.... usw.. finally FIniFile.Free; end; |
Re: FastIniFiles Memory Leaks
Zitat:
[Error] FastIniFiles.pas(77): Cannot override a static @hoika: auch nach ändern durch inherited Destroy; geht der Leak nicht weg. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz