AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Erzeugt Funktion mit AllocMem ein Memory-Leak?
Thema durchsuchen
Ansicht
Themen-Optionen

Erzeugt Funktion mit AllocMem ein Memory-Leak?

Ein Thema von Jumpy · begonnen am 8. Aug 2014 · letzter Beitrag vom 8. Aug 2014
Antwort Antwort
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
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Erzeugt Funktion mit AllocMem ein Memory-Leak?

  Alt 8. Aug 2014, 12:57
Ich würde sagen: Ja. Aber du kannst es ja testen, indem du in der DPR die Zeile ReportMemoryLeaksOnShutdown := True; einfügst.
  Mit Zitat antworten Zitat
gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
627 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Erzeugt Funktion mit AllocMem ein Memory-Leak?

  Alt 8. Aug 2014, 13:00
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

Geändert von gmc616 ( 8. Aug 2014 um 13:15 Uhr) Grund: Frage richtig lesen ^^
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz