AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Pointer

Ein Thema von blablab · begonnen am 15. Dez 2009 · letzter Beitrag vom 15. Dez 2009
Antwort Antwort
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#1

Problem mit Pointer

  Alt 15. Dez 2009, 21:45
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:
TNodeData = record
   str: string;
   bool: Boolean;
end;
NodeData: array of TNodeData;
Folgender Code geht nicht:
Delphi-Quellcode:
NodeData[idx].str := 'Hallo';
node.Data := @(NodeData[idx]);
...
if Assigned(node.Data) then begin
   Result := TNodeData(node.Data^).str;
end;
Hier kommt eine Zugriffsverletzung.
Was mach ich falsch??

Grüße
blablab
  Mit Zitat antworten Zitat
-=Breeze=-

Registriert seit: 14. Apr 2008
Ort: Köln
29 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Problem mit Pointer

  Alt 15. Dez 2009, 22:09
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 NodeData[idx] := 'Hallo' eine Zugriffsverletzung bringt.

Du hast ein dynamisches Array und dessen Länge noch nicht definiert
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Problem mit Pointer

  Alt 15. Dez 2009, 22:11
Der Fehler tritt auf bei
Result := TNodeData(node.Data^).str; -> Zugriffsverletzung
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#4

Re: Problem mit Pointer

  Alt 15. Dez 2009, 22:23
Das Array NodeData, auf welches dein Zeiger zeigt, existiert aber noch?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Problem mit Pointer

  Alt 15. Dez 2009, 22:28
ja, ich hab testweise folgendes gemacht
Delphi-Quellcode:
NodeData[idx].str := 'Hallo';
node.Data := @(NodeData[idx]);
ShowMessage(TNodeData(node.Data^).str);
-> Zugriffsverletzung
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Problem mit Pointer

  Alt 15. Dez 2009, 22:38
Delphi-Quellcode:
TNodeData = record
   str: string;
   bool: Boolean;
end;
PNodeData = ^TNodeData;
NodeData: array of PNodeData;
Dann bekomme ich bei
Result := PNodeData(node.Data)^.str; oder
Result := TNodeData(node.Data^).str; 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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#7

Re: Problem mit Pointer

  Alt 15. Dez 2009, 22:41
hmmmm

Im Nodefall sollte es auch so gehn,
Delphi-Quellcode:
NodeData[idx].str := 'Hallo';
node.Data := Pointer(idx);
ShowMessage(NodeData[Integer(node.Data)].str);
welches auch einen Vorteil hat:
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Problem mit Pointer

  Alt 15. Dez 2009, 23:07
Zitat von himitsu:
Nodefall
Ächtz... AUA! Doch nicht mitten in der Woche SO einer
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Problem mit Pointer

  Alt 15. Dez 2009, 23:12
@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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#10

Re: Problem mit Pointer

  Alt 15. Dez 2009, 23:28
Na dann

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz