Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Objekt an verketteter Liste hinzufügen. (https://www.delphipraxis.net/47183-objekt-verketteter-liste-hinzufuegen.html)

Pseudemys Nelsoni 7. Jun 2005 14:20


Objekt an verketteter Liste hinzufügen.
 
Moin,

ich versuche ein Objekt einer verketteten Liste so anzuhängen:

Delphi-Quellcode:
function TChannels.NewChannel(const ChannelName: string): TChannel;
var
  Channel: TChannel;
begin
  Result := TChannel.Create;
  if FChannelNode = nil then
    FChannelNode := Result
  else
  begin
    Channel := FChannelNode;
    while Channel.FNextChannel <> nil do
      Channel := Channel.FNextChannel;
    Channel.FNextChannel := Result;
    Result.FName := ChannelName;
  end;
end;
Nur gibts dort eine AV und der Pfeil zeigt auf das erste "if".... Weiss jemand was da falsch sein soll? Scheint mir alles richtig

Phoenix 7. Jun 2005 14:35

Re: Objekt an verketteter Liste hinzufügen.
 
Was steht denn in FChannelNode am Anfang drin? Bist Du überhaupt auf dem richtigen Objekt?
Vielleicht ist FChannelNode ja gar nicht nil, verweist aber auf einen Bereich im Speicher der nicht mehr allokiert ist? Das wäre jetzt so der erste Punkt wo ich weitersuchen würde.

maximov 7. Jun 2005 14:40

Re: Objekt an verketteter Liste hinzufügen.
 
Ich würde eher sagen, dass der fehler eine zeile höher liegt im constructor des channels:
Delphi-Quellcode:
Result := TChannel.Create; <-- da
denn delphi ist manchmal mental schon ein bisschen weiter als der code ;) ...Oder Self selbst ist ungültig.

Phoenix 7. Jun 2005 14:51

Re: Objekt an verketteter Liste hinzufügen.
 
Zitat:

Zitat von maximov
Oder Self selbst ist ungültig.

Stimmt, deswegen habe ich ja auch gefragt, ob er überhaupt auf dem richtigen Objekt arbeitet. ;-)

Robert_G 7. Jun 2005 14:55

Re: Objekt an verketteter Liste hinzufügen.
 
Der constructor scheint der einzige ort zu sein an dem es knallen kann.
Ich gehe einfach mal davon aus, dass Pseudo die Liste erzeugt hat, bevor er ihr Items anhängen will ;)

btw: Ich würde dir empfehlen Head und Tail zu pflegen. Wenn du für jedes Anfügen erst das Ende suchen musst... :shock:

Pseudemys Nelsoni 7. Jun 2005 15:53

Re: Objekt an verketteter Liste hinzufügen.
 
Moin Phoenix,

Zitat:

Was steht denn in FChannelNode am Anfang drin?
Nichts, d.h "nil". FChannelNode ist der Beginn der Kette.

Zitat:

Vielleicht ist FChannelNode ja gar nicht nil, verweist aber auf einen Bereich im Speicher der nicht mehr allokiert ist?
Nope, kann nicht sein, da FChannelNode 100% nil ist (ist als Feld im Objekt "TChannels").

Moin maximov,

Zitat:

Ich würde eher sagen, dass der fehler eine zeile höher liegt im constructor des channels:
? Der sieht doch goldrichtig aus. Das dürfte keine Probleme machen.

Zitat:

Oder Self selbst ist ungültig.
Daran lags, FChannels(Das Objekt der liste) war gar nicht erzeugt :oops: :mrgreen:


Danke allen^^

Robert_G 7. Jun 2005 17:55

Re: Objekt an verketteter Liste hinzufügen.
 
Zitat:

Zitat von Pseudemys Nelsoni
Zitat:

Oder Self selbst ist ungültig.
Daran lags, FChannels(Das Objekt der liste) war gar nicht erzeugt :oops: :mrgreen:

Schön... Endlich mal was mit dem ich dich beim nächsten Mal aufziehen kann. :mrgreen:

DP-Maintenance 7. Jun 2005 17:55

DP-Maintenance
 
Dieses Thema wurde von "alcaeus" von "Sonstige Fragen zu Delphi" nach "Object-Pascal / Delphi-Language" verschoben.
Ist ein Problem mit der Delphi-Language


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