Tobias Koenig schrieb:
Ich nehme an das Fortran im Gegensatz zu C++ intern eine Liste der initialisierten Pointer hält (und diese Updated wenn ein Objekt gelöscht wird) und ASSOCIATED wirklich nachprüft ob der Pointer noch gültig ist.
Nein tut es nicht. Der Fortran95-Code:
integer,pointer :: a,b allocate(a) b => a a = 77 if (associated(b)) print *,'b=',b deallocate(a) !(*) if (associated(a)) print *,'a=',a if (associated(b)) print *,'b=',b end
Wird dir entweder eine Zahl ausgeben, oder einen Speicherzugriffsfehler produzieren. Das hängt davon ab, ob die Laufzeitbibliothek bei (*) entscheidet den Speicher dem System zurückzugeben oder noch andere Bereiche im verwendeten Block liegen.
Auch bei Fortran kann es deshalb passieren, dass ein Programm nach einer Änderung wegen eines Speicherzugriffsfehlers an einer völlig anderen Stelle abschmiert.