Einzelnen Beitrag anzeigen

Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#1

Erzeugt Funktion mit AllocMem ein Memory-Leak?

  Alt 8. Aug 2014, 12:42
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;
Ralph
  Mit Zitat antworten Zitat