Bonjour, j'ai un programme en fortran que je développe pour mon boulot depuis pas mal de temps alors que ce n'est pas mon métier de base; mais j'ai déjà obtenu ici plusieurs pistes qui m'ont permis de surpasser d'autres écueils, donc j'y reviens.
Ce programme me fait des misères, donc je lui demande de nombreuses sorties intermédiaires pour essayer de comprendre ce qui ne va pas à chaque fois qu'une nouvelle erreur se présente; et c'est justement une de ces impressions intermédiaires qui patine aujourd'hui :
(Le programme s'appelle S comme essai, et il a comme arguments le nombre de threads sur lequel il doit s'exécuter, puis le nom du fichier de sortie, puis celui d'entrée)
Alors j'ai deux gamelles différentes; l'une en faisant ceci : (et l'autre plus loin)
---Ici, le format qui cause l'erreur en cours d'exécution est celui de l'instruction suivante, et c'est le "Z" qui déconne, alors que quelques lignes plus haut il avait bien été imprimé, avec la deuxième instruction "print" que je donne ici pour comparaison :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 $ 2>&1 ./S 1 p2srfd04BAR el04BAR.inp . .. (sorties normales) ... p2srfd:00 apres lecpch pour FAB, Z=0 p2srfd:00 K=1 IDelt= 1, EIDelt(IDelt)=30259813, IDpchN(EIDelt(IDelt))= 121 p2srfd:00 K=1 IDelt= 2, EIDelt(IDelt)=30259814, IDpchN(EIDelt(IDelt))= 122 p2srfd:00 K=1 IDelt= 3, EIDelt(IDelt)=30259815, IDpchN(EIDelt(IDelt))= 123 p2srfd:00 K=1 IDelt= 4, EIDelt(IDelt)=30259816, IDpchN(EIDelt(IDelt))= 124 At line 1402 of file /S/DATA/DVA/F90/BN/SS.f Fortran runtime error: Expected INTEGER for item 12 in formatted transfer, got CHARACTER (A,I2.2, A,I1, A,I5, A,I1, A,I1, A,F7.2) ^ shSpch:00 DIR=0, IDpch= 121, K=1, Z=
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 print ! DIR IDpch K Z Spch(DIR, IDpch, K, Z) +'(A,I2.2, A,I1, A,I5, A,I1, A,I1, A,F7.2)', +'shSpch:', TID, +' DIR=', DIR, +', IDpch=', IDpch, +', K=', K, +', Z=', Z, ! ici ligne 1402 +', Spch(DIR, IDpch, K, Z)=', Spch(DIR, IDpch, K, Z) print'(A,I2.2, A,I1)', 'p2srfd:', TID, +' apres lecpch pour FAB, Z=', Z
---et j'obtiens une erreur un peu différente en faisant celà : (le fichier qui est redirigé vers l'entrée de gdb est donné plus loin)
(le fichier qui est redirigé vers l'entrée de gdb est le suivant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 $ 2>&1 gdb ./S<RUN04BAR|tee tmp04BAR . .. (sorties normales) ... p2srfd:00 K=5, IDelt= 1, EIDelt(IDelt)=30259813, IDpchN(EIDelt(IDelt))= 121, Spch(0, IDpchN(EIDelt(IDelt)), K, 0)= 9.05 p2srfd:00 K=5, IDelt= 2, EIDelt(IDelt)=30259814, IDpchN(EIDelt(IDelt))= 122, Spch(0, IDpchN(EIDelt(IDelt)), K, 0)= 15.33 p2srfd:00 K=5, IDelt= 3 Program received signal SIGSEGV, Segmentation fault. 0x00002aaaaab455ca in ?? () from /usr/lib64/libgfortran.so.1 (gdb) #0 0x00002aaaaab455ca in ?? () from /usr/lib64/libgfortran.so.1 #1 0x00002aaaaab4584c in ?? () from /usr/lib64/libgfortran.so.1 #2 0x00002aaaaab41cd5 in ?? () from /usr/lib64/libgfortran.so.1 #3 0x000000000040e1f7 in shspch (dir=@0x7fffffffe4dc, idpch=@0x7fffffffe4c4, k=@0x7fffffffe4cc, spch=0x7fffffffe49c, z=@0x1) at /S/DATA/DVA/F90/BN/SS.f:1401 #4 0x0000000000403c20 in MAIN__ () at /S/DATA/DVA/F90/BN/SS.f:302 #5 0x000000000041c45e in main () (gdb) A debugging session is active. Inferior 1 [process 22306] will be killed. Quit anyway? (y or n) [answered Y; input not from terminal] $
---Dans ce deuxième cas, ça plante en 1401, soit une ligne plus loin que précédemment et dans la même instruction "print", et je vois dans la sortie de gdb que l'adresse de la variable "Z" n'a pas le même format que les autres, j'ai "z=@0x1" au lieu d'un format en "truc=@0x7fffffffABCD" avec ABCD étant quatre chiffres hexadécimaux variables.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6$ cat RUN04BAR run 1 p2srfd04BAR el04BAR.inp bt q y $
Bon, en fait ça a l'air d'être la même cause, c-à-d. le Z, mais pourquoi l'adresse de cette variable est elle présentée différemment des autres, et surtout pourquoi fait elle planter mon programme ?
Merci de me donner des idées de choses à chercher,
David
Partager