![]() |
JVHIDControllerClass mit Speicherlecks?
Hi,
ich versuche mich gerade an HID mit der HID-Komponente von R. Marquardt. Beim Test der Usagedemo mit FastMM4 bekomme ich eine Reihe von Speicherlecks. Es scheint mindestens bei
Delphi-Quellcode:
zu sein.
HidCtl.CheckOutByIndex(Dev, Idx);
Wer weiß, was da los ist bzw. wie man das umgeht? (Delphi 7 Prof.) Gruß Mattze |
Re: JVHIDControllerClass mit Speicherlecks?
Vllt postest du die FastMM logs hier, damit man es sich anschauen kann.
|
Re: JVHIDControllerClass mit Speicherlecks?
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
mach' ich doch glatt... Gruß Mattze |
Re: JVHIDControllerClass mit Speicherlecks?
Du musst externe Debuggerinfo einschalten und neu erstellen.
Dann siehst du die Funktionsnamen, wo der Speicher alloziert wurde. |
Re: JVHIDControllerClass mit Speicherlecks?
Hallo,
guter Rat. Wäre ich nie darauf gekommen... Meines Wissens SIND die eingeschaltet, jedenfalls funktioniert es mit der Anzeige bei anderen Programmen. Vielleicht weiß ich ja nicht, wo ich noch etwas ein- bzw. ausschalten muss. Gib mir mal einen Tipp! Ansonsten: Besser wird das LOG-File wahrscheinlich nicht! Wo suchen??? Gruß Mattze |
Re: JVHIDControllerClass mit Speicherlecks?
Zitat:
|
Re: JVHIDControllerClass mit Speicherlecks?
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
Recht hast Du!!! Die Map-Datei war beim UsageDemo-Projekt (natürlich) ausgeschaltet. Wer kommt aber auch auf sowas... ;-) Hier das komplette Log. (Natürlich suche ich jetzt auch. Nun weiß ich ja, wo ich gucken muss... Aber trotzdem...) Gruß Mattze |
Re: JVHIDControllerClass mit Speicherlecks?
Hallo,
man soll zwar niemals nie sagen, aber ich finde das wohl NIE raus. Ich habe mal nach fehlenden Freigaben von PnPInfo gesucht und überall mal probiert, aber da war das Problem nicht dabei - oder er ist vorher per Zugriffsverletzung abgeschmiert. Also bitte ich doch um Hilfe! Gruß Mattze |
Re: JVHIDControllerClass mit Speicherlecks?
Also mit kommt der Code in "TJvHidDeviceController.Destroy" etwas seltsam vor.
Delphi-Quellcode:
Das DoUnplug führt kein Free aus und FList ist eine TList, kümmert sich also nicht um die Objekte. Das ist dann wohl per Definition ein Speicherleck.
if IsCheckedOut then
DoUnplug // pull the plug for checked out TJvHidDevices else Free; // kill TJvHidDevices which are not checked out |
Re: JVHIDControllerClass mit Speicherlecks?
Hallo,
vielen Dank! Das FList (: TLIST) kam mir auch etwas merkwürdig vor. Mir schien auch zu fehlen, dass die "internen Strukturen" davon ordentlich freigegeben werden, bevor es selber zerstört wird. Ich hatte nur noch nicht das §eventuelle Wo" gefunden. Ich dachte aber auch, dass das nicht sein könne... Mir geht vor allem diese FPnPInfo nicht aus dem Sinn. Das ist etwas, das in jedem Listeneintrag der FList existiert und freigegeben werden müsste. Das andere habe ich noch nicht richtig überprüft. Kann aber durchaus sein, dass es wirklich und nur an der Freigabe der Liste liegt. Ich habe mich nur nicht getraut, daran was zu machen... Aber nun probiere ich das auch mal. Danke noch mal! Gruß Mattze |
Re: JVHIDControllerClass mit Speicherlecks?
Wäre schön, wenn du hier einen Kommentar hinterlässt, wenn es geklappt hat. Dann passe ich den JVCL Code an.
|
Re: JVHIDControllerClass mit Speicherlecks?
Hallo,
mache ich natürlich. Kann aber noch ein Momentchen dauern. Gestern bin ich nicht mehr dazu gekommen. Vielleicht am Wochenende... Gruß Mattze |
Re: JVHIDControllerClass mit Speicherlecks?
Hallo und guten Morgen,
komisch, aber wahr. Eigentlich wollte ich vor dem Aufstehen nur noch schnell die Umgebung zum Testen fertig machen. Beim Öffnen bin ich genau da gelandet, wo ich schon einen Befehl eingebaut, aber wegen akuten Zeitmangels erst mal wieder auskommentiert hatte. Diesmal habe ich ihn versucht und es klappte sofort alles! Ich habe es mit der UsagesDemo und einem Programm von mir, wo ich das HID eingebaut hatte, getestet. Bisher kein Fehler... Also, bei mir klappt es jetzt. Wie gleich zu Anfang vermutet, lag es an der fehlenden Freigabe von FPnpInfo in TJvHidDeviceController.Destroy in der Unit JvHidControllerClass. Genauer:
Delphi-Quellcode:
Gruß
destructor TJvHidDeviceController.Destroy;
var I: Integer; HidDev: TJvHidDevice; begin (...) for I := 0 to FList.Count - 1 do begin HidDev := FList.Items[I]; with HidDev do begin // set to uncontrolled FMyController := nil; //hier muss das dazu kommen: FPnpInfo.Free; if IsCheckedOut then DoUnplug // pull the plug for checked out TJvHidDevices else Free; // kill TJvHidDevices which are not checked out end; end; FList.Free (...) inherited Destroy; end; Mattze |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:16 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