AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Abort verursacht MemoryLeak ?

Ein Thema von Int3g3r · begonnen am 22. Sep 2020 · letzter Beitrag vom 25. Sep 2020
Antwort Antwort
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Abort verursacht MemoryLeak ?

  Alt 25. Sep 2020, 08:41
Hallo,
Delphi-Quellcode:
list := TStringList.Create;
try
  list.Add('C:\...\bin\Win32\attach\Leaks.PNG');
  list.Add('C:\...\bin\Win32\attach\recompile.PNG');
  list.Add('C:\...\bin\Win32\attach\TelSpick.exe');
  list.Add('C:\...\bin\Win32\attach\Unbenannt.PNG');

  Mail := TMail.Create;
  Mail.sendMassMail('mail@gmx.ch','MassMail',10); //<- Abort
finally
  list.Free;
end;
Wenn es nicht anders geht:
Außerdem arbeitest Du wieder mit quasi-globalen Variablen, hier Mail.
Ich würde Mail z.B. im FormCreate erzeugen und in FormDestroy freigeben.
Heiko
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.589 Beiträge
 
Delphi 7 Professional
 
#2

AW: Abort verursacht MemoryLeak ?

  Alt 25. Sep 2020, 09:37
Hier steht was zu Abort

Damit wird klar, warum das list.free nicht aufgerufen wird.
Delphi-Quellcode:
  try
    Funktion_die_im_Fehlerfalle_Abort_aufruft;
  except
    on e : EAbort do begin
      ShowMessage('Abort wurde aufgerufen.');
    end;
    on e : Exception do begin
      MessageDLG(e.Message,mtError,[mbok],0);
    end;
  end;
Abort ist letztlich auch nur 'ne Exception, deren Meldung "verschluckt" wird. Man kann sie aber im Exceptionhandling "abfangen" und damit auch in dem Fall ein "vernünftiges" Weiterlaufen des Programmes sicherstellen.

Mal ein annähernd sinnfreies Beispiel zum rumprobieren:
Delphi-Quellcode:
function Funktion_Bricht_Im_Fehlerfalle_Mit_Abort_ab(i : Integer) : Integer;
begin
  Result := 4812;
  if i < 0 then begin // Als Fehlerfall ist hier einfach mal i < 0 definiert.
    Abort;
  end else begin
    Result := Result div i;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  list : TStringList;
  k : Integer;
  i : Integer;
begin
  list := TStringList.Create;
  list.Add('irgendwas');
  list.Add('nochwas');
  i := 47;
  k := 12;
  try
    try
      // Wahlweise mit i = 0, i = -1 und i = 1 ausprobieren
      // und die Reihenfolge der Wertzuweisung zu i mal ändern.
      i := 1;
      k := Funktion_Bricht_Im_Fehlerfalle_Mit_Abort_ab(i);
      i := -1;
      k := Funktion_Bricht_Im_Fehlerfalle_Mit_Abort_ab(i);
      i := 0;
      k := Funktion_Bricht_Im_Fehlerfalle_Mit_Abort_ab(i);
    except
      on e : EAbort do begin
        MessageDlg(e.Message,mtError,[mbOk],0);
      end;
      on e : Exception do begin
        MessageDlg(e.Message,mtError,[mbOk],0);
      end;
    end;
    ShowMessage(Format('i = %d, k = %d',[i,k]));
  finally
    list.Free;
  end;
end;
  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 05: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