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
 
Int3g3r

Registriert seit: 28. Nov 2018
Ort: Schweiz
118 Beiträge
 
Delphi 10.3 Rio
 
#1

Abort verursacht MemoryLeak ?

  Alt 22. Sep 2020, 17:12
Guten Tag,

Ich habe hier ein MemoryLeakOnShutdown das verursacht wird wenn ich ein Abort; and der kommentierten Stelle mache. Wenn ich das Abort auskommentiere verschwindet das MemoryLeak.
Naja der Code Block ist sowieso abgearbeitet also könnte ich das Abort weglassen.
Wenn aber durch eine Änderung noch mehr Code hinzukommt, komme ich um das Abort nicht herum da es sich um einen Fehler handelt, und die Routine abgebrochen werden soll.

Zitat:
13-20 bytes: Unknown x1
37-44 bytes: Unknown x1
69-76 bytes: TStringList x1
85-92 bytes: UnicodeString x2
93-100 bytes: UnicodeString x2
Warum entsteht hier ein MemoryLeak ?

Delphi-Quellcode:
procedure TMail.sendMassMail(_from, _subject: String; _delayInSeconds:Int64);
var i: Integer;
    msg: TIdMessage;
begin
  try
      if not isFileEmpty(AppPath+mailListFilePath) then
      begin
        mailListText := TStringList.Create;
        mailListText.LoadFromFile(AppPath+mailListFilePath);
    
        for i := mailListText.Count-1 downto 0 do
        begin
          if Trim(mailListText[i]) = 'then
          begin
            mailListText.Delete(i);
          end
          else
          begin
            mailListText[i] := Trim(mailListText[i]);
          end;
        end;
      end
      else
      begin
        ShowMessage('MailListe ist leer. Abbruch!');
        abort;
      end;

      if mailListText.Count < 1 then
      begin
        ShowMessage('Keine Empfänger in der MailListe. Abbruch!');
        abort;
      end;

      if mailInit(_from,_subject) then
      begin
        if (mailListText.Count > 0) and (mailListText.Count < autoMailMaxCount) then
        begin
          msg := prepareMailMsg(_from,_subject);
            for i := 0 to mailListText.Count-1 do
            begin
              if (i mod autoMailPackageSendSize = 0) and (i <> 0) then
              begin
                 Sleep(_delayInSeconds*1000);
                 sendMail(mailListText[i],msg);
              end
              else
              begin
                 sendMail(mailListText[i],msg);
              end;
            end;
        end
        else
        begin
          Showmessage('EMails können nicht an mehr als ' + IntToStr(autoMailMaxCount)+
                      ' Empfänger gesendet werden.'+#13#10+'Zu viele Empfänger in der Liste. Abbruch!' );
          abort; // Dieses Abort verursacht das MemoryLeak, die anderen sind noch nicht getestet!
        end;
      end;
  
  finally
    FreeAndNil(msg);
    FreeAndNil(mailListText);
    FreeAndNil(attachmentsText);
    FreeAndNil(bodyText);
  end;
end;
Ich habe im Debugger getestet ob das TryFinally sauber durchläuft und das tut es, auch wenn das Abort nicht auskommentiert ist. Also nach dem Abort läuft er ins finally.

Daher verstehe ich nicht warum ich durch dieses Abort ein MemoryLeak erhalte.

Mfg Int3g3r
  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 02:08 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