AGB  ·  Datenschutz  ·  Impressum  







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

Klassen und Pointer - Fehlerursache?

Ein Thema von monty.ms · begonnen am 30. Mai 2008 · letzter Beitrag vom 30. Mai 2008
 
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Klassen und Pointer - Fehlerursache?

  Alt 30. Mai 2008, 22:17
Alle Instanzenvariablen (somit auch Self) sind intern Zeiger auf das eigentliche Objekt.

Daraus ergeben sich folgende Dinge:

@Self erstellt eine temporärer Zeiger, also eine temporäre Variable, welcher die Adresse von Self aufnimmt. Da Self nur ein weiterer Zeiger ist, erstellst du einen Zeiger auf einen Zeiger auf das Objekt. Der zweite Zeiger in dieser Kette ist eine temporäre Variable, welche ihre Gültigkeit und somit ihren Speicherplatz mit dem Ende der Procedure verliert, in der dieser Code steht. Somit: Dein Zeiger den du Init übergibst, ist nach Ausführung der aufrufenden Funktion hinfällig und zeigt auf diesen temporären Speicher, der nicht mehr zugeordnet ist und schon fleissig für andere Dinge genutzt wird.

Nochwas: Alle Objekte sind von TObject abgeleitet. Die Angabe von class(TObject) ist optional und entspricht damit class

Somit: Entferne überall Pointer und ersetze mit TObject. Zusätzlich entferne überall den impliziten Adressoperator @ und es sollte so funktionieren wie du es dir gedacht hast.
  Mit Zitat antworten Zitat
 


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 15:22 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