![]() |
Speicherlecks Bug in D6 oder FastMM4?
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
wegen eines Speicherproblems in einem Programm habe ich, das hier im Forum oft empfohlene FastMM4, installiert. Ich bin dabei auf folgendes gestoßen: FastMM4 meldet Speicherlecks (Meldung im Anhang) bei einem Prog (Code siehe unten), das nur aus einem Formular besteht! Ist das ein Bug von D6 oder FastMM4? Oder mache ich was falsch? Gruß Klaus Projekt1:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} end. program Project1; uses FastMM4 in '..\Lib\FastMM\FastMM4.pas', Forms, Unit1 in 'Unit1.pas' {Form1}; {$R *.res} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end. |
Re: Speicherlecks Bug in D6 oder FastMM4?
AFAIK habe ich in der HelpIntfs.pas was gefixt. Frag mich morgen nochmal damit ich dir den DIFF senden kann.
|
Re: Speicherlecks Bug in D6 oder FastMM4?
Um detailierte Informationen von FastMm4 zu bekommen, muß ich die Delphi 6 Runtime Library Update 2 installieren. Ich habe es mir gerade heruntergeladen, aber noch nicht installiert.
Würde damit das Bug beseitigt? |
Re: Speicherlecks Bug in D6 oder FastMM4?
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich habe jetzt das Update 2 und 3 für meine D6-Version installiert, aber das Problem ist damit nicht beseitigt. Muß oder kann man damit leben? Als Anhang das ausfürliche Protokoll von FastMM4. Leider kann ich mit den ganzen Speicheradressen nichts anfangen. Auf solche Tiefen der Programmierung bin ich nocht nicht vorgestoßen. @Bernhard Geyer Zitat:
Danke im Vorraus. Gruß Klaus |
Re: Speicherlecks Bug in D6 oder FastMM4?
Neue Prozedur:
Delphi-Quellcode:
In Funktion RegisterViewer/GetHelpSystem den Aufruf von
procedure EnsureHelpManager;
begin if HelpManager = nil then HelpManager := THelpManager.Create; end;
Delphi-Quellcode:
durch
if not Assigned(HelpManager) then
...
Delphi-Quellcode:
ersetzen
EnsureHelpManager;
In Methode THelpViewerNode.Create und THelpManager.AssignHelpSelector den Aufruf von _AddRef löschen und in THelpManager.Release die Schleifen
Delphi-Quellcode:
auf
for i := 0 to ...
Delphi-Quellcode:
umstellen.
.Count - 1 downto 0
Neuere Delphi-Versionen sind entsprechend gefixt. |
Re: Speicherlecks Bug in D6 oder FastMM4?
Hallo,
Dank der Hilfe von Bernhard Geyer, Google und vielen Tests habe ich das Problem gelöst. Letztendlich haben nur 2 kleine Änderungen zum Erfolg geführt. FastMM4 meldet nun keine Lecks mehr. Für alle die es interessiert: 1. unit HelpIntfs
Delphi-Quellcode:
2. unit WinHelpViewer
function GetHelpSystem(out System : IHelpSystem) : Integer;
begin if not Assigned(HelpManager) then begin HelpManager := THelpManager.Create; // HelpManager._AddRef; // diese Zeile entfernen end; System := HelpManager as IHelpSystem; Result := 0; end;
Delphi-Quellcode:
Gruß
finalization
if Assigned(HelpViewer.FHelpManager) then begin HelpViewer.InternalShutDown; end; if Assigned(WinHelpTester) then begin WinHelpTester := nil; end; HelpViewer.FreeInstance; // diese zeile einfügen HelpViewer := nil; // diese zeile einfügen end. Klaus |
Re: Speicherlecks Bug in D6 oder FastMM4?
heißt das THelpManager stellt ein Interface dar und die Variable HelpManager ist als Objekt (THelpManager) definiert?
und wenn du schon HelpManager._AddRef nutzt, dann solltest du diese Referenz auch irgendwann wieder reigeben (HelpManager._Release;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:39 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