Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Erzeugt Funktion mit AllocMem ein Memory-Leak? (https://www.delphipraxis.net/181357-erzeugt-funktion-mit-allocmem-ein-memory-leak.html)

Jumpy 8. Aug 2014 11:42

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;

Namenloser 8. Aug 2014 11:57

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:
ReportMemoryLeaksOnShutdown := True;
einfügst.

gmc616 8. Aug 2014 12:00

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