Einzelnen Beitrag anzeigen

Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#4

Re: Kann "Clear" Fehler auslösen?

  Alt 29. Jul 2005, 10:52
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 = 'JOINthen
      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.
Mario
  Mit Zitat antworten Zitat