Ich möchte überprüfen, ob ein Zeiger in einem abgeleiteten Typ bereits definiert wurde oder nicht. Ich habe den folgenden einfachen Code geschrieben, um Ihnen mein Problem zu zeigen:
%Vor%Das Kompilieren dieses Codes mit gFortran 4.4.1 und das Ausführen unter Ubuntu ergibt das Ergebnis:
%Vor%Derselbe Code, der unter Windows Vista mit dem Intel Fortran-Compiler 11.0 kompiliert wurde, bietet Folgendes:
%Vor%Das erste Ergebnis (gFortran) erwarte ich eigentlich. Aber die Tatsache, dass der Intel-Compiler ein anderes Ergebnis liefert, lässt mich befürchten, dass mein Code nicht korrekt ist. Mache ich etwas falsch mit den Zeigern in diesem Beispiel? Irgendeine Idee oder Erklärung?
Vielen Dank im Voraus für Ihre Hilfe!
Sie testen, ob ein Zeiger zugeordnet ist, ohne explizit nullify
auf den Zeigern zu verwenden. Eine großartige Seite über allgemeine Fehler von Fortran (mit entferntem Codebeispiel):
Viele Leute denken, dass der Status eines Zeigers, der nie zugeordnet wurde, nicht. damit verbundenen. Das ist falsch. (...) Wenn ein Zeiger deklariert wird, ist sein Status nicht definiert und kann nicht sicher mit
associated
intrinsic abgefragt werden.
Es sieht so aus, als ob der Gfortran-Compiler explizit Zeiger auf Deklaration aufheben könnte - Sie sollten sich das wahrscheinlich so vorstellen, als würde der Compiler deklarierte Variablen automatisch auf Null setzen und sich nicht auf dieses Verhalten verlassen. Wenn Sie sicher sein wollen, werden Sie es selbst annullieren.
Bearbeiten :
Ich lese den Intel-Compiler-Leitfaden durch und er gibt an, wie sichergestellt werden kann, dass der Zeiger korrekt ungültig gemacht wird - Sie können Ihren abgeleiteten Typ als
einrichten %Vor%Beachten Sie jedoch, dass dies wie in dem verlinkten Artikel erwähnt auf Fortran 95 beschränkt zu sein scheint.