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;