2010-12-14 9 views
0

Ich debugge ein Fortran 90-Programm mit Valgrind. Ich bekomme Fehler diese mit in der SpurWas macht for_write_seq_lis?

==93929== Use of uninitialised value of size 4 
==93929== at 0x7C3D4B: for__add_to_lf_table 
==93929== by 0x8014A8: for__open_proc. 
==93929== by 0x7C7B0F: for__open_default 
==93929== by 0x7F3648: for_write_seq_lis 
<rest of my application backtrace> 

Und ich verstehe nicht, wenn es mein Fehler ist oder einfach eine Marotte der internen Bibliothek. Ich würde gerne wissen, was diese Funktionen tun, und andere relevante Informationen.

Ich kompiliere mit ifort (IFORT) 11.1 20100806, Valgrind 3.6.0 auf Macosx.

Edit: Ich konnte Auftreten von Valgrind Fehler erkennen, wenn die associated(ptr) intrinsic verwendet wird, oder wenn print * verwendet wird. Auf jeden Fall bin ich nur neugierig zu wissen, wofür diese Routinen verantwortlich sind. Was ist ein Tisch?

Antwort

0

Meine Vermutung wäre, dass die Symbole mit den Namen for_ in den Laufzeitbibliotheken definiert sind, die das Programm verwendet, wahrscheinlich mit dem Intel-Compiler. Ich nehme an, du hast das Stefano selbst herausgefunden. Was sie tun, ist unklar, außer dem Offensichtlichen: verschiedene Operationen von Fortran ausführen.

Was haben Sie getan, um die Ursachen des Fehlers aufzuspüren, was Valgrind dazu bringt, sich zu beschweren, dass Sie einen nicht initialisierten Wert verwendet haben? Haben Sie versucht, mit der Option -check uninit zu kompilieren? Hast du den Intel Source Checker am Code ausprobiert?

EDIT: Aha. Eine der Besonderheiten von Fortran ist, dass zwischen dem Zeitpunkt, zu dem es deklariert wird, und dem Zeitpunkt, zu dem es zum ersten Mal einem Ziel zugeordnet wird, ein Zeiger keinen Assoziationsstatus hat. Es ist weder verknüpft noch nicht zugeordnet, und Aufrufe von ASSOCIATED können zu ungeraden Ergebnissen führen. gemäß der Norm sollten sie beispielsweise weder .true. noch .false. zurückgeben. Dies kann die Ursache Ihres Problems sein, obwohl die anderen Symptome, die Sie melden, nicht auf diese Weise zeigen.

+0

Leider habe ich keine Ahnung, was das Problem ist. Der Code funktioniert gut für kleine Fälle, aber sobald ich die Größe vergrößere, bekomme ich einen "6591 Illegal Instruction" Fehler. Ich habe alle Debug-Optionen aktiv und ich bekomme keine Fehlermeldung, wenn Sie auf einem kleinen Fall laufen. Ich bin derzeit auf der Suche nach dem Wendepunkt in der Größe, die es zum Boom macht. –