AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Versändnisfrage zu Pointern und Datenzuweisung
Thema durchsuchen
Ansicht
Themen-Optionen

Versändnisfrage zu Pointern und Datenzuweisung

Ein Thema von Pfoto · begonnen am 21. Dez 2007 · letzter Beitrag vom 22. Dez 2007
Antwort Antwort
Seite 1 von 2  1 2      
Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#1

Versändnisfrage zu Pointern und Datenzuweisung

  Alt 21. Dez 2007, 18:44
Hallo zusammen,

ich arbeteite seit einigen Tagen mit dem VirtualStringTree und
muss mich deshalb auch mit Pointern beschäftigen.

In den Tutorials zu Pointern habe ich gelernt dass
eine Zuweisung durch eine Dereferenzierung geschehen muss:

EinPointer^ := Wert; Edit: Es war bei mir eher so:
EinPointer^ := EinObjekt;
Nun hatte ich das Dach (^) mal vergessen und merkwürdigerweise
funktionierte die Zuweisung ebenfalls problemlos.

Ist das eine "großzügige" Einstellung in Delphi die
sowas erlaubt? In den Optionen unter "Compiler" finde
ich dahingehend jedoch nichts.


Wäre einfach schön zu wissen warum das trotzdem funktionert.



Dank und Gruß
Pfoto
Jürgen Höfs
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Versändnisfrage zu Pointern und Datenzuweisung

  Alt 21. Dez 2007, 19:17
Eigendlich müsstest du damit dann den Pointer geändert haben...
...es sei dem Delphi hat wegen der Code-Optimierung keinen "richtigen" Pointer drausgemacht, sondern, da die zu speichernden Daten < 4 Byte sind zB, gleich den Wert in die Speicherstelle geschrieben...
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
gispos

Registriert seit: 20. Dez 2007
Ort: germany, stuttgart
12 Beiträge
 
#3

Re: Versändnisfrage zu Pointern und Datenzuweisung

  Alt 21. Dez 2007, 19:30
Kommt natürlich darauf an als was dein Pointer Deklariert ist. Wenn Du den Pointer
als ^Integer (Pointer auf Integer) deklariert hast, gibt es dann bei einer Zuweisung
eines anderen Integeren Wertes der ebenfalls ein Pointer ist, keine Probleme.

Gruß gispos
  Mit Zitat antworten Zitat
Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Versändnisfrage zu Pointern und Datenzuweisung

  Alt 21. Dez 2007, 19:43
Ich habe das hier deklariert:

Delphi-Quellcode:
  PTreeData = ^TTreeData;
  TTreeData = record
    TreeObj: TBaseTreeObj;
  end;

Heißt das also im Klartext, nur wenn ich etwas größeres als einen
Integer per Pointer deklariere, wäre eine Dereferenzierung notwendig?

Mit der Dereferenzierung macht man den Compiler also nur
darauf aufmerksam, das da mehr kommt als ein Integer?


So ganz habe ich es wohl noch nicht verstanden...
Jürgen Höfs
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Versändnisfrage zu Pointern und Datenzuweisung

  Alt 21. Dez 2007, 19:58
mach einfach immer Pointer^ := ...also mit Dach.
Du weißt nicht ob das immer klappt und irgendwann hast du ne Zugriffsverletzung.
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Versändnisfrage zu Pointern und Datenzuweisung

  Alt 21. Dez 2007, 19:59
Außerdem ist es richtig und Du siehst auch nach Jahren noch, dass Du hier einen Pointer dereferenzierst.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: Versändnisfrage zu Pointern und Datenzuweisung

  Alt 22. Dez 2007, 08:38
Der Unterschied ist folgender:

Ohne Dereferenzierung (also ohne ^) änderst du die Adresse, auf die der Zeiger zeigt.

Mit Dereferenzierung (also mit ^) änderst du den Inhalt, auf den der Zeiger zeigt.

Wenn du einen Zeiger mit Getmem/New erzeugst und änderst die Adresse (ohne Dereferenzierung also), dann erzeugst du ein Memory-Leak, da du diesen Speicher angelegt hast, ihn aber nie wieder freigeben kannst (schließlich überschreibst du die Adresse).

Also..immer schön ans ^ denken
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Versändnisfrage zu Pointern und Datenzuweisung

  Alt 22. Dez 2007, 09:35
Achso!
Es ging also nur deshalb, weil ich dem Pointer
ein Objekt zugewiesen habe und damit ja auch wieder
nur einen Pointer, also eine Adresse, verteilt habe.

Danke Euch allen!

Gruß
Pfoto
Jürgen Höfs
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#9

Re: Versändnisfrage zu Pointern und Datenzuweisung

  Alt 22. Dez 2007, 10:49
Genau das ist so eine Sache Objekte sind schon Pointer, aber Delphi verschleiert den Fakt recht gut.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#10

Re: Versändnisfrage zu Pointern und Datenzuweisung

  Alt 22. Dez 2007, 19:22
... und Delphi setzt die Dereferenzierung nicht mehr explizit voraus seit D6. Dort kann man den ^ auch weglassen. Folgendes ist ohne Probleme möglich:

Delphi-Quellcode:
type
  PTest = ^TTest;
  TTest = record
    a: integer;
    b: integer;
  end;

procedure Test;
var
  lTest: PTest;
begin
  New(lTest);
  try
    lTest.a := 4;
    lTest.b := lTest^.a;
  finally
    Dispose(lTest);
  end;
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:53 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