Moin Luckie,
theoretisch müsste es ja so sein, sonst könnte ja kein Fehler kommen, aber dem ist nicht so, beim Beenden passiert nichtsmehr.
Das komische ist auch, das ich mich entscheiden kann, was ich auskommentieren möchte um keine
av zu bekommen und zwar entweder:
Delphi-Quellcode:
destructor TChannels.Destroy;
begin
//FChannelList.Clear;
inherited;
end;
oder innerhalb im OnRead eines ClientSockets:
Delphi-Quellcode:
if Command = 'JOIN' then
begin
if CompareText(FNickname, User.FNickname) = 0 then
begin
//Channel := FChannels.NewChannel(Param(Params, 0));
//if Assigned(FOnJoined) then
// FOnJoined(Self, Channel);
end else
NewChannel sieht dabei so aus:
Delphi-Quellcode:
function TChannels.NewChannel(const Channel: string): TChannel;
begin
Result := TChannel.Create;
Result.FName := Channel;
Result.FTopic := '';
Result.FKey := '';
Result.FLimit := 0;
Result.FUserCount := 0;
FChannelList.Add(Result);
end;
Daher wundert mich das, wenn ich eines der beiden Teile auskommentiere, gibts keine Fehler, sonst
AV.
Und ich seh nicht was daran falsch sein könnte.
EDIT:
@KrasserChecker:
Eine Objektliste kann nil Objekte enthalten, der aufruf von Clear führt dabei aber nicht zu einer
AV, da sie das ganz gut handlen kann bzw prüft ob ein Objekt bereits nil ist, oder nicht.
Edit4:
Zitat:
Was mir noch einfällt:
Ist das Feld "FChannelList" in "Create" von "TChannels" erzeugt worden? Wenn ja solltest du in Destruktor nicht "FChannelList.Clear" sondern "FChannelList.Free" aufrufen.
Jo, das stimmt, aber ich möchte in anderen Prozeduren später auch noch "Clear" aufrufen können, also muss das mit Clear auch irgendwie funktionieren oder?
Edit5:
Gerade getestet mit .Free - das löst auch einen Fehler aus. Ich glaube nicht das die Fehler an meinen auskommentierten Zeilen liegt. Wie ich sowas liebe, nun weiss ich nicht wo ich nach Fehlern suchen soll.