AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Wie erkenne ich eigentlich ein Memory-Leak?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie erkenne ich eigentlich ein Memory-Leak?

Ein Thema von pelzig · begonnen am 8. Feb 2015 · letzter Beitrag vom 9. Feb 2015
 
Frank Ranis

Registriert seit: 15. Okt 2008
17 Beiträge
 
#9

AW: Wie erkenne ich eigentlich ein Memory-Leak?

  Alt 9. Feb 2015, 10:02
Hallo himitsu,

OK das mit dem Array war jetzt ein doofes Besipiel, wollte ja nur den aktuell benutzen Speicherbedarf ausgeben.

Nehmen wir das folgende Beispiel:

Ich habe zwei Buttons.
Mit Button3 erzeuge ich ein BMP.
Mit Button4 kille ich es wieder.

Drücke ich aber zwei oder noch mehr mal auf Button3, dann habe ich Bitmap-Leichen erzeugt, an die ich nicht mehr rannkomme.
Das kann man dann schön an der Anzeige 'Aktueller Speicherbedarf' sehen.
Ich komme dann nicht mehr auf den Speicher-Wert, den das Programm beim Starten hatte.

Gruß

Frank

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls;

type

  Tint_vektor=array of integer;
  Tint_matrix=array of Tint_vektor;

  TForm1 = class(TForm)
    Timer1: TTimer;
    StatusBar1: TStatusBar;
    Button3: TButton;
    Button4: TButton;
    procedure Timer1Timer(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
   bmp:tbitmap;
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Speicher-Bedarf-Abfrage
procedure TForm1.Timer1Timer(Sender: TObject);
var Speicherinfo:THeapStatus;
begin
 // Aktuellen Speicherbedarf ausgeben
 speicherinfo:=GetHeapStatus;
 statusbar1.Panels[0].Text:=
              'Aktueller Speicherbedarf='+
              inttostr(speicherinfo.TotalAllocated)+
              ' Byte';
end;

// Bitmap erzeugen
procedure TForm1.Button3Click(Sender: TObject);
begin
 bmp:=tbitmap.Create;
end;

// Bitmap killen
procedure TForm1.Button4Click(Sender: TObject);
begin
 if bmp<>nil
  then
   begin
    bmp.Free;
    bmp:=nil;
   end;
end;

end.
Angehängte Dateien
Dateityp: zip Speicherleck2.zip (204,1 KB, 0x aufgerufen)
  Mit Zitat antworten Zitat
 


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 19:37 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