![]() |
Erzeugt Funktion mit AllocMem ein Memory-Leak?
Hallo,
ich habe die folgende Funktion im Netz gefunden und bereits leicht angepasst, um zu sehen, ob eine bestimmte Datei gedruckt wird. Kann das sein, das diese Funktion ein Memory-Leak erzeugt, da der mit AllocMem reservierte speicher nicht wieder frei gegeben wird? Wie und wo im Code würde man das machen? FreeMem im finally?
Delphi-Quellcode:
function TPDFPrinter.FileInPrinterQueue: Boolean;
type TJobs = array [0..1000] of JOB_INFO_1; PJobs = ^TJobs; var hPrinter: THandle; bytesNeeded, numJobs, i: Cardinal; pJ: PJobs; begin Result:=false; hPrinter := GetCurrentPrinterHandle; try EnumJobs(hPrinter, 0, 1000, 1, nil, 0, bytesNeeded, numJobs); pJ := AllocMem(bytesNeeded); if not EnumJobs(hPrinter, 0, 1000, 1, pJ, bytesNeeded, bytesNeeded, numJobs) then RaiseLastWin32Error; if numJobs>0 then for i := 0 to Pred(numJobs) do if UpperCase(SavePChar(pJ^[i].pDocument))=UpperCase(Filename) then begin Result:=True; break; end; finally ClosePrinter(hPrinter); end; end; |
AW: Erzeugt Funktion mit AllocMem ein Memory-Leak?
Ich würde sagen: Ja. Aber du kannst es ja testen, indem du in der DPR die Zeile
Delphi-Quellcode:
einfügst.
ReportMemoryLeaksOnShutdown := True;
|
AW: Erzeugt Funktion mit AllocMem ein Memory-Leak?
Ja, denn die Funktion macht schließlich genau das. Speicher reservieren.
So lange du den Speicher nicht mit FreeMem wieder frei gibst, bleibt da ein Loch. ... natürlich im finally |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:13 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