IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Fortran Discussion :

Pourquoi un "print" fait-il tout planter ?


Sujet :

Fortran

  1. #1
    Membre habitué
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Points : 180
    Points
    180
    Par défaut Pourquoi un "print" fait-il tout planter ?
    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)
    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=
    ---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
          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)
    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]
    $
    (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
    $ cat RUN04BAR
    run 1 p2srfd04BAR el04BAR.inp
    bt
    q
    y
    $
    ---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.

    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
    P.S. Dis Toto, pourquoi l'univers existe-t'il ?
    Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se causer avant.

  2. #2
    Membre habitué
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Points : 180
    Points
    180
    Par défaut
    Bon, merci de m'avoir lu, mais ne vous souciez plus de ça; je suis nul, j'avais une liste d'argument d'un sous programme qui ne correspondait pas avec le call !
    P.S. Dis Toto, pourquoi l'univers existe-t'il ?
    Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se causer avant.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 488
    Points : 593
    Points
    593
    Par défaut
    Bonjour,

    Citation Envoyé par dva2tlse Voir le message
    j'avais une liste d'argument d'un sous programme qui ne correspondait pas avec le call !
    D'où l'intérêt de mettre les routines dans un(des) module(s).

    Bonne continuation.

  4. #4
    Membre habitué
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Points : 180
    Points
    180
    Par défaut
    Bonjour, c'est un programme que je développe alors que ce n'est pas mon métier, hédonc je ne sais même pas ce qu'est un module.
    Et zut,
    David
    PS: s'il n'y avait que ça que je ne sache pas...
    P.S. Dis Toto, pourquoi l'univers existe-t'il ?
    Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se causer avant.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 488
    Points : 593
    Points
    593
    Par défaut
    Bonjour,

    Dur, dur.
    Comme souvent il y a le choix difficile à faire entre tâtonner (et y perdre un certain temps) ou "perdre" un certain temps à d'abord se mettre au parfum avant de se lancer.
    Et ça dépend évidement des impératifs et perspectives.
    Quoi qu'il en soit, si tu devais n'avoir qu'une seule doc pour t'accompagner dans ton périple Fortran, je recommande les supports de cours de l'Idris.

    Bon courage pour la suite.

  6. #6
    Membre habitué
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Points : 180
    Points
    180
    Par défaut
    Oui, oui en effet, les cours de l'idris ils sont bien; je me sers pas mal aussi de celui sur openmp.
    Bye,
    David
    P.S. Dis Toto, pourquoi l'univers existe-t'il ?
    Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se causer avant.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [nouveau .js fait tout planter]
    Par zouzou99 dans le forum jQuery
    Réponses: 2
    Dernier message: 16/08/2010, 14h54
  2. StrCopy() : pourquoi cette syntaxe fait planter ?
    Par bvsud dans le forum Langage
    Réponses: 9
    Dernier message: 08/08/2009, 18h30
  3. Flash + PHP : La fonction include fait tout planter !
    Par Arsach dans le forum Dynamique
    Réponses: 1
    Dernier message: 19/06/2008, 10h51
  4. DTS : importation volumineuse fait tout planter
    Par meufeu dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 30/08/2005, 20h09
  5. [Lomboz][JSP]Le paramètre prefix de taglib fait tout planter
    Par MasterMic dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 20/06/2005, 15h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo