Einzelnen Beitrag anzeigen

Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.617 Beiträge
 
#5

Re: Warum funzt dieser Code??

  Alt 4. Sep 2004, 10:19
Zitat von mirage228:
In deinem Beispiel müsste der Zugriff auf "addiere" mit einer Zugriffsverletzung enden.
Das ist so nicht ganz korrekt.

Du hast bei einem Objekt immer zwei Teile:
Einen Teil, der nur die Daten hält. Für diesen Teil muss ein Speicherbereich reserviert werden, der später wieder freigegeben werden sollte (Objekt Instanzieren & Zerstören).

Daneben gibt es aber noch den Codebereich. Der ist zur Laufzeit des Programmes immer an der gleichen Stelle, und wird auch nicht pro Objekt abgelegt sondern nur einmal pro Klasse.

Da Deine Variable den Typ der Klasse hat, zeigen die Methoden der Klasse immer schon auf die richtige Stelle im Speicher.

Bei jedem Methodenaufruf wird aber zusätzlich die 'Self-Referenz' übergeben. Das ist ein Pointer auf den Datenbereich des jeweiligen konkreten Objektes, und wird dazu verwendet, die verweise auf z.B. Variablen in dem Objekt aufzulösen.

Bei Deinem Aufruf ist das Objekt nicht instanziert, die Self-Referenz ist also ungültig. Die Adresse der Methode selber nicht. Würdest Du nun versuchen, bei dem Aufruf auf eine Variable Deiner Klasse zuzugreifen, dann würde das nicht gehen, da Du aber keinen Teil aus dem Datenbereich benötigst, kann das Programm ohne auf einen nicht existenten Speicher zu benötigen problemlos weiterlaufen.


Nachtrag: Mift.. schon wieder zu langsam
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat