Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Exception in Tlist (https://www.delphipraxis.net/66278-exception-tlist.html)

bailey 27. Mär 2006 19:36


Exception in Tlist
 
Tach an alle

ich kann mir die Fehler nicht erklären. in Abwechslung kommen die Exception 1 und 3.
was mache ich falsh..!?


Delphi-Quellcode:
procedure TClientClass.PDellLogOutFromDownLoadQueue;
var
    i, n      :    integer;
    TempKon   :    PTKontakt;
    tempFile  :    PTDFile;
begin
    try
     for i:=0 to Download.Count - 1 do
        begin
        if (TDFile(Download.Items[i]^).StatusQueue = cLogOut) then
            begin
            //loschen alle verbindungen
            for n := 0 to TDFile(Download.Items[i]^).From.Count - 1 do
                begin
                    try
                        TKontakt(TDFile(Download.Items[i]^).From.Items[n]^).Verbindung.Free;
                        tempKon :=  PTkontakt(TDFile(Download.Items[i]^).From.Items[n]^);
                        Dispose(TempKon);
                        TDFile(Download.Items[i]^).From.Delete(n);
                    except
                        on e : Exception do showmessage('Exceptio on TClientClass.PDellFileFromDownLoadQueue 1 ' + e.Message);
                    end; // try -except
                end; // for n
            try
                TempFile := Download.Items[i];
                Dispose(TempFile);
                Download.Delete(i);
            except
                on e : Exception do Showmessage('PDellFileFromDownLoadQueue 2 ' + e.Message);
            end; // try -except
            end; // if
        end; // for i
     except
          on e : Exception do Showmessage('PDellFileFromDownLoadQueue 3 ' + e.Message);
     end;
end;

Hawkeye219 27. Mär 2006 19:55

Re: Exception in Tlist
 
Durch das Entfernen der Elemente mit der Delete-Methode verkleinerst Du die Liste. Somit greifst Du auf nicht mehr vorhandene Listenelemente zu.
Lasse einfach beide Schleifen rückwärts laufen.

Gruß Hawkeye

bailey 27. Mär 2006 19:59

Re: Exception in Tlist
 
:cyclops: Das hilft...!?

Hawkeye219 27. Mär 2006 20:09

Re: Exception in Tlist
 
Ja, weil Du dann immer die Elemente freigibst, die Du in den folgenden Schleifendurchläufen nicht mehr benötigst.
Bei Deiner Lösung ist das nicht so.

Stelle Dir eine Liste mit 10 Elementen vor, dann läuft Deine Schleife von 0 bis 9.
Beim ersten Durchlauf entfernst Du das erste Element, die Liste enthält dann nur noch 9 Elemente (Index 0 bis 8).
Im letzten Durchlauf möchtest Du dann auf das Element mit der Nummer 9 zugreifen. Crash!

Gruß Hawkeye

bailey 27. Mär 2006 20:40

Re: Exception in Tlist
 
Danke für die Antwort, es hat geholfen.))) :spin2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:52 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 by Thomas Breitkreuz