Einzelnen Beitrag anzeigen

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