AGB  ·  Datenschutz  ·  Impressum  







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

Komisches Problem mit Pointer

Ein Thema von blablab · begonnen am 14. Okt 2009 · letzter Beitrag vom 14. Okt 2009
Antwort Antwort
blablab

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

Komisches Problem mit Pointer

  Alt 14. Okt 2009, 08:39
Hallo!

Ich hab folgenden Code:

Delphi-Quellcode:
procedure TForm1.StrGridSuchenDblClick(Sender: TObject);
var p: ^TTreeNode;
    node: TTreeNode;
begin
   aktKontakt.Node := nil;
   node := nil;
   p := Pointer(StrToInt('$' + Copy(FilteredContArr[Pred(RowClicked)]^[0], 9, 8)));
   ShowMessage(inttostr(integer(p)));
   node := p^;
   ShowMessage(inttostr(integer(@node)));
   aktKontakt.Node := node;
   KontaktOeffnen;
end;
Ich lade die korrekte Adresse in p und möchte nun das TTreeNode an der Adresse p haben.
komischerweise zeigen mir die beiden ShowMessages zwei verschiedene Zahlen an (1244508 und 1144060). Das kapier ich nicht, was mach ich falsch?

Vielen Dank schonmal!

Grüße blablab
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#2

Re: Komisches Problem mit Pointer

  Alt 14. Okt 2009, 09:02
Was erwartestet Du denn?

Du zeigst den Inhalt von p an (also ein Adresse, die Du etwas undurchsichtig zusammenbastelst, aber wahrscheinleich irgendwo im Heap liegt).

Dann zeigst Du die Adresse von node an, und die liegt mit Sicherheit auf dem Stack.

Wäre schon arg ungewöhnlich, wenn diese beiden Adresse gleich wären.
  Mit Zitat antworten Zitat
blablab

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

Re: Komisches Problem mit Pointer

  Alt 14. Okt 2009, 10:00
Ok, der Test mit den ShowMessages war wohl falsch...

Deshalb hier nochmal mein Problem:

Was ich will:
Ich habe ein TTreeNode mit dem namen node. Dessen Adresse möchte ich als String speichern und später möchte ich wieder auf node zugreifen.

Was ich mache:
Delphi-Quellcode:
var str: string;

procedure Nr1;
var int: integer;
   node: TTreeNode
begin
   node := Tree.Items.AddChildFirst(Tree.Selected, 'Neu');
   int := Integer(@Node);
   str := inttostr(int);
end;

procedure Nr2;
var p: ^TTreeNode;
   tmpNode: TTreeNode;
begin
   tmpNode := nil;
   p := Pointer(StrToInt(str));
   tmpNode := p^;
end;
Jetzt sollte tmpNode = node sein, ist es aber nicht...
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Komisches Problem mit Pointer

  Alt 14. Okt 2009, 10:07
Und was passiert, wenn du das "@" vor dem Node weglässt?

Allerdings erschließt sich mir der Sinn nicht, ein Objektzeiger als String zu speichern.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Komisches Problem mit Pointer

  Alt 14. Okt 2009, 10:15
Zitat von sirius:
Allerdings erschließt sich mir der Sinn nicht, ein Objektzeiger als String zu speichern.
Vielleicht möchte er sich ihn ausdrucken und an die Wand hängen.

Warum speicherst du den Objektzeiger nicht als das was er ist, nämlich als Zeiger?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Komisches Problem mit Pointer

  Alt 14. Okt 2009, 10:16
Hallo,

gaaaanz schlecht.
Warum zum Teufel machst du sowas ???

Merke dir doch den Node selbst.

MS hat dem TTreeNode dazu die Data Variable (einfacher Pointer) verpasst.

Ich packe da immer eine eigene Klasse rein,
die die Node-Infos enthält.

in TTreeView.OnDeleting wird auch die Klasse wieder gelöscht.

Delphi-Quellcode:
type
  TTreeNodeInfo = class
    Tag: Integer;
  end;

var
  TreeNodeInfo: TTreeNodeInfo

TreeNode:= TV.Items.Add;
TreeNodeInfo:= TTreeNodeInfo.Create;
TreeNodeInfo,Tag:= 1;
TreeNode.Data:= TreeNodeInfo;

Heiko
Heiko
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Komisches Problem mit Pointer

  Alt 14. Okt 2009, 10:17
Zitat von blablab:
Dessen Adresse möchte ich als String speichern und später möchte...
Ich hoffe nicht, daß du mit "speichern" das Speichern in eine Datei meinst.
Das nächste mal, wenn du dein Programm öffnest, ist die Adresse dieses Nodes mit Garantie nicht dieselbe.

Wenn du mit "speichern" meinst, daß du die Adresse des Nodes irgendwo während der Laufzeit halten möchtest meinst, dann ist es völlig unnötig den merkwürdigen Weg über Strings zu gehen. Nimm einfach einen Zahlentypen in dem die Adresse passt oder nimm gleich einen Pointertypen, am Besten genau den Pointertypen den die Node benutzt.
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
blablab

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

Re: Komisches Problem mit Pointer

  Alt 14. Okt 2009, 10:53
@sirius:
Vielen Dank, Das ist es!
Ich stand da etwas auf dem Schlauch, denn komischerweise ging das mit @ bis jetzt immer. Erst zuletzt gings unter bestimmten umständen nicht mehr...

@Tyrael Y.:
Nein, keine Angst, ich meinte nur zwischenspeichern im Rahm

@hoika:
Danke für den Tipp!

@all:
ja ich weiß, nen pointer als (Hexadezimal)String zu speichern ist nicht wirklich schön... Am anfang gings noch nicht anders (bzw nur sehr umständlich). Aber inzwischen hab ich die Datenstrukturen nochmal geändert, ich werds wohl demnächst ändern...
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.767 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Komisches Problem mit Pointer

  Alt 14. Okt 2009, 10:56
Zitat von blablab:
zwischenspeichern im Rahm :)
den Rahm im flüssigen oder geschlagen/festen Zustand?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
blablab

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

Re: Komisches Problem mit Pointer

  Alt 14. Okt 2009, 11:13
@Klaus01: Ich mag ihn lieber im festen zustand.

Habs jetzt geändert, war netmal so schwer. Spart immerhin zusätzlichen Rechenaufwand und 4 Byte. Da freut sich der Rahm, und ich will ja nicht dass er sauer wird. Wer will schon 2GB Sauerrahm...?

  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 07:38 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