Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Verkettete Liste: Acces Violation (https://www.delphipraxis.net/37764-verkettete-liste-acces-violation.html)

Pseudemys Nelsoni 9. Jan 2005 23:28


Verkettete Liste: Acces Violation
 
Liste der Anhänge anzeigen (Anzahl: 1)
hi,

ich habe eine linked list geschrieben jedoch ist da "irgendwo" ein fehler, ich habe das 2zeilen-programm mal angehangen, ist sonst schwer zu erkären was ich meine, wenn jemand lust hat kann er ja mal folgendes testen:

"1" im Edit eingeben und "Ban" klicken
"2" im Edit eingeben und "Ban" klicken
"3" im Edit eingeben und "Ban" klicken
"Unban" klicken (die "3" steht noch im edit...)
dann auf "Zeigen" klicken

-> Access Violation

Nur finde ich absolut keinen Fehler.

Vielleicht seht ihr ja was

Hansa 9. Jan 2005 23:55

Re: Verkettete Liste: Acces Violation
 
Programm habe ich nicht getestet. Denn es sieht schwer danach aus, daß daß du verkettete Listen mit Arrays verwechselst. Das sind aber 2 paar Schuhe und haben fast nichts miteinander zu tun. 8) Ein Array ist sehr starr, auch ein dynamisches. Verkettete Listen, mit denen geht alles.

Robert_G 10. Jan 2005 01:33

Re: Verkettete Liste: Acces Violation
 
Du hast vergessen Prev bzw. Next vom ersten bzw. letzten Glied zu enbtfernen. ;)
Delphi-Quellcode:
procedure TChannelBanList.Unban(const ANickname: string);
var
   ChannelBan       : PChannelBan;
begin
   if IsBanned(ANickname, ChannelBan) then
   begin
      if (ChannelBan = FChannelFirstBan) and
         (FChannelLastBan = FChannelFirstBan) then
      begin
         FChannelFirstBan := nil;
         FChannelLastBan := nil;
      end
      else if ChannelBan = FChannelFirstBan then
      begin
         FChannelFirstBan := FChannelFirstBan^.Next;
         FChannelFirstBan^.Prev := nil;
      end
      else if ChannelBan = FChannelLastBan then
      begin
         FChannelLastBan := FChannelLastBan^.Prev;
         FChannelLastBan^.Next := nil;
      end
      else
      begin
         ChannelBan^.Next^.Prev := ChannelBan^.Prev;
         ChannelBan^.Prev^.Next := ChannelBan^.Next;
      end;
      Dispose(ChannelBan);
   end;
end;

Pseudemys Nelsoni 10. Jan 2005 07:59

Re: Verkettete Liste: Acces Violation
 
@hansa: ich kenn den unterschied sehr gut und verstehe daher nicht was du da geschrieben hast, vielleicht schon n bisschen am bier genippt was :thumb:

@robert: vielen dank , genau daran lag es :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:25 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