![]() |
Problem mit Pointer
Hallo!
Ich würde gerne Daten in eine TTreeNode speichern. Dazu hat TTreeNode die Eigenschaft Data: Pointer der ich etwas zuweisen möchte. Ich habe:
Delphi-Quellcode:
Folgender Code geht nicht:
TNodeData = record
str: string; bool: Boolean; end; NodeData: array of TNodeData;
Delphi-Quellcode:
Hier kommt eine Zugriffsverletzung.
NodeData[idx].str := 'Hallo';
node.Data := @(NodeData[idx]); ... if Assigned(node.Data) then begin Result := TNodeData(node.Data^).str; end; Was mach ich falsch?? Grüße blablab |
Re: Problem mit Pointer
Guten Abend,
es wäre schön wenn du sagen würdest, wo genau der Fehler auftritt. Laut deinem Code würde ich sagen, dass schon
Delphi-Quellcode:
eine Zugriffsverletzung bringt.
NodeData[idx] := 'Hallo'
Du hast ein dynamisches Array und dessen Länge noch nicht definiert :) |
Re: Problem mit Pointer
Der Fehler tritt auf bei
Delphi-Quellcode:
-> Zugriffsverletzung
Result := TNodeData(node.Data^).str;
|
Re: Problem mit Pointer
Das Array NodeData, auf welches dein Zeiger zeigt, existiert aber noch?
|
Re: Problem mit Pointer
ja, ich hab testweise folgendes gemacht
Delphi-Quellcode:
-> Zugriffsverletzung
NodeData[idx].str := 'Hallo';
node.Data := @(NodeData[idx]); ShowMessage(TNodeData(node.Data^).str); |
Re: Problem mit Pointer
Delphi-Quellcode:
Dann bekomme ich bei
TNodeData = record
str: string; bool: Boolean; end; PNodeData = ^TNodeData; NodeData: array of PNodeData;
Delphi-Quellcode:
oder
Result := PNodeData(node.Data)^.str;
Delphi-Quellcode:
keine Zugriffsverletzung mehr, dafür bekomme ich aber immer nur NodeData[0].str zurück, auch wenn der Node ein völlig anderer Index al 0 zugewiesen wurde.
Result := TNodeData(node.Data^).str;
|
Re: Problem mit Pointer
hmmmm :gruebel:
Im Nodefall sollte es auch so gehn,
Delphi-Quellcode:
welches auch einen Vorteil hat:
NodeData[idx].str := 'Hallo';
node.Data := Pointer(idx); ShowMessage(NodeData[Integer(node.Data)].str); Wird das Array verändert (neue Einträge angehängt), dann stimmt der Index immernoch, wärend sich die Arraydaten aber verschoben haben können. |
Re: Problem mit Pointer
Zitat:
|
Re: Problem mit Pointer
@himitsu:
Jetzt versteh ichs! Danke! Ich benutze einen dynamisches Array dessen Größe ich gelegentlich vergrößere. Das bedeutet es gibt nicht genug Platz um den Array zu vergrößern, also wird er woanders hinkopiert -> die Pointer sind ungültig. Daran hab ich überhaupt nicht gedacht, danke! p.s: "nodefall" nettes wortspiel :lol: |
Re: Problem mit Pointer
Na dann :lol:
Eine andere Möglichkeit wäre noch, daß du nach einem SetLength die Pointer anpaßt, bzw. mitverschiebst. @Medium: OK, ich sag meinem Unterbewußtsein, daß es nächstes Mal bis zum Wochenende warten soll. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 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