![]() |
TreeView - AddObject Pointerproblem
Hi,
Ich füge so Nodes hinzu:
Delphi-Quellcode:
Es steht alles im Quelltext.. Ich verstehe halt nicht warum dann Answers = nil ist...var tmp: TAnswer; begin if TreeView1.Selected.IsFirstNode then begin // dieses TreeView1.Selected.Data wurden im FormCreate schon gesetzt... tmp := PDialogue(TreeView1.Selected.Data)^.Answers.Add('Neue'); tmp.Text.Add('Bitte Text einfügen'); TreeView1.Items.AddChildObject(TreeView1.Selected,'Neue',@tmp); end else begin // Wenn man auf ein Child-Node ausgewählt hat // TreeView1.Selected.Data müsste jetzt ein @tmp sein das oben in dem Node gespeichert wurde // Das ist es auch.. aber komischerweise ist PAnswer(TreeView1.Selected.Data)^.Answers = nil tmp := PAnswer(TreeView1.Selected.Data)^.Answers.Add('Neue'); // AV tmp.Text.Add('Bitte Text einfügen'); TreeView1.Items.AddChildObject(TreeView1.Selected,'Neue',@tmp) end; Wenn ihr nicht kapiert was ich will dann schreibt das bitte :mrgreen: Gruß Neutral General |
Re: TreeView - AddObject Pointerproblem
tmp ist eine lokale Variable. Durch dein Add bekommst du ein TAnswer zurück und weißt es tmp zu. Den Zeiger auf Tmp weißt du dann data zu (durch AddObject). Und genau da ist der Fehler!
Letzendlich weißt du einen Pointer auf den Stack zu. Nach verlassen der procedure wird tmp vom stack entfernt und dein Pointer zeigt auf eine Stelle im Stack wo nichts mehr liegt bzw. inzwischen was anderes. Letztendlich machst du es dir einfach zu schwer. TAnswer ist eine ObjectInstanz und somit ein Pointer! Du brauchst also nicht den Pointer auf den Pointer zuweisen sondern kannst auch direkt die Objectinstanz auf Data zuweisen. Dementsprechend brauchst du dann auch nicht auf PAnswer casten und zu dereferenzieren sondern kannst gleich auf TAnswer casten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:09 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