AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Probleme mit Pointer-Übergabe - Was mache ich falsch?
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit Pointer-Übergabe - Was mache ich falsch?

Ein Thema von Nonsense · begonnen am 24. Apr 2004 · letzter Beitrag vom 24. Apr 2004
Antwort Antwort
Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#1

Probleme mit Pointer-Übergabe - Was mache ich falsch?

  Alt 24. Apr 2004, 19:32
Hallo,

ich möchte einen Pointer auf eine Instanz speichern, um später auf diese zuzugreifen.
Delphi-Quellcode:
// Die Prozedur wird von einer anderen Unit aus aufgerufen.

procedure TFormParameter.MeineProzedur(Settings: TSettings);
var
  FSettings: ^TSettings;
begin
  // Settings wird übergeben und Pointer soll gespeichert werden
  FSettings^ := Settings;

  [...]
end;
Ich bekomme eine AV ("[...] write of adress 00000000" !?). Aber warum?
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Probleme mit Pointer-Übergabe - Was mache ich falsch?

  Alt 24. Apr 2004, 20:10
Moin!

1. Eine Instanz ist schon ein Zeiger - daher ist Settings auch immer nur 4 Bytes gross, weil es ein Pointer ist (kannste ja mal mit SizeOf() nachprüfen). Somit brauchst du für deine Lösung einfach nur eine Variable vom Typ TSettings deklarieren und diese kannst du nehmen zum speichern.

2. Warum die AV kommt? Kein Problem, überlegen wir mal gemeinsam:

2a) du definierst eine Variable vom Typ "Zeiger auf TSettings" - ist ok.
2b) danach enthält der Zeiger nix - also Nil, weil er wurde noch nicht auf irgendwas gesetzt, daher zeigt er auf nix.
2c) Du weist der Adresse wohin FSettings gerade hinzeigt die Instanz Settings zu - und da liegt das Problem: FSettings zeigt nirgendwo hin, praktisch auf Adresse 0, da ihm noch keine gegeben wurde, wohin er zeigen soll. Daher die AV.

Abhilfe zu deinem Beispiel:

Ein Zeiger enthält immer nur die Adresse, wo was steht. Daher weise dem Zeiger einfach die Adresse von Settings zu:
  FSettings := @Settings; Dann geht das...

MfG
Muetze1
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#3

Re: Probleme mit Pointer-Übergabe - Was mache ich falsch?

  Alt 24. Apr 2004, 21:03
Danke. Und ich dachte, wenn ich "FSettings: TSettings" anstatt "FSettings: ^TSettings" nehme, wird FSettings eine Kopie vom übergebenen Objekt. Habe es mit SizeOf überprüft und es sind wirklich nur 4 Byte. Boah.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Probleme mit Pointer-Übergabe - Was mache ich falsch?

  Alt 24. Apr 2004, 23:20
Moin!

Da kannst du entweder ganz beruhigt sein oder ganz besorgt sein, aber sowas wie die automatischen Copy Constructoren bei C++ gibt es bei Delphi nicht - und auch nicht diese Automatismen mit dem automatischen kopieren...

In Delphi wird sowas eigentlich immer so gelöst, dass man entweder eine neue Instanz anlegt und dem Constructor als Parameter eine Instanz gleichen Typs gibt von der dann alles kopiert wird, oder es wird eine neue Instanz angelegt und man nutzt eine Methode (z.B. Assign ist weit verbreitet) die dann eine Instanz bekommt und dann die Eigenschaften/Daten kopiert...

MfG
Muetze1
  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 08:26 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