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 :

Erreur de segmentation en 64bits


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 51
    Par défaut Erreur de segmentation en 64bits
    Bonjour,

    Je souhaite compiler et exécuter un programme fortran77.

    Ce qui marche:
    - exécution sous Ubuntu 10.04 32bit du programme compilé dynamiquement avec gfortran4.4 sous Ubuntu 10.04 32bit
    - exécution sous CentOS 64bit du programme compilé statiquement avec gfortran4.4 sous Ubuntu 10.04 32bit
    - compilation dynamique avec gfortran4.4 sous CentOS 64bit et MacOS 10.6 64bit

    Ce qui ne marche pas :
    - exécution sous CentOS 64bit du programme compilé dynamiquement avec gfortran4.4 sous CentOS 64bit
    - exécution sous MacOS 10.6 64bit du programme compilé dynamiquement avec gfortran4.4 sous MacOS 10.6 64bit

    Concrètement, quand ça ne marche pas, le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    write(6,1265)ihr,iterh,psitop/100.,cpytr,psidif/100.
     1265 format(' ihr=',i3,' iterh=',i3,' psitop=',f6.2,' cpytr=',f8.2,' psidif=',f6.2)
    imprime :
    ihr= 1 iterh= 51 psitop= NaN cpytr= 0.00 psidif= NaN
    Le problème viendrait-il du changement de taille des variables (integer, real, etc) ou de l'alignement en mémoire?

    J'ai déjà essayé de forcer en dur la taille de ces variables en 32 bits par integer*4 et real*4, mais sans succès.

    Connaîtriez vous des options de compilation permettant de résoudre mon problème?
    J'ai déjà essayer d'ajouter les options :
    • -fdefault-double-8 -fdefault-real-8 -fdefault-integer-8

    • -ff2c

    • -fmax-stack-var-size=16777216

    mais sans succès.

    Merci par avance.

    cc

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 489
    Par défaut
    Bonjour,

    Ce type de problème est le plus souvent révélateur d'un bogue dans le programme, du type utilisation d'une variable non-initialisée, d'un dépassement de tableau, d'une incohérence entres les arguments envoyés à une routine et ceux qu'elle attend, etc.

    As-tu vérifié que la compilation (et l'exécution) de ton programme avec toutes les options de compilations du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    -Wall -ffpe-trap=invalid,zero,overflow -fbounds-check finit-real=nan
    ne révèle rien d'anormal?

  3. #3
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 51
    Par défaut
    Bonjour,

    Merci pour votre réponse.

    J'ai compilé sous MacOS 10.6 64bit, avec GNU Fortran (GCC) 4.5.1 20100506 (prerelease), et les options que vous m'avez indiquées : -Wall -ffpe-trap=invalid,zero,overflow -fbounds-check -finit-real=nan

    La compilation me donne des warnings du type :
    - Warning: Line truncated at (1)
    - Warning: Nonconforming tab character at (1)
    - Warning: Label 3968 at (1) defined but not used
    - Warning: Unused variable 'err2' declared at (1)
    - Warning: Unused dummy argument 'icycno' at (1)

    Est-ce anormal? Pensez-vous qu'il faille toutes les corriger (il y en a 839)?


    Merci par avance.

  4. #4
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 51
    Par défaut
    Re-bonjour,

    Je viens de voir sur la doc de gfortran (http://gcc.gnu.org/onlinedocs/gfortr...n-Options.html) que -finit-real=nan initialise silencieusement les variables réelles à NaN.
    Effectivement, certaines valeurs calculées par mon programme fortran sont égales à "NaN".

    Pour signaler cette initialisation, il faut utiliser l'option -finit-real=snan.
    J'obtiens alors une "Floating point exception" à l'exécution.

    D'où peut venir et comment corriger ce genre d'exceptions?

    Merci par avance.

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Par défaut
    Ce que je comprends de ce que tu as écrit, c'est que le résultat de ton programme dépend de l'initialisation par défaut faite par le compilateur.

    Si c'est effectivement le cas, alors ça signifie que tu utilises la valeur d'une variable avant d'y avoir toi-même mis une valeur, ce qui est illégal. Tu dois initialiser toi-même tes variables.

    Dans la liste des messages "warning", il y en a possiblement un (ou plusieurs) disant qu'une variable est utilisée avant d'être initialisée.

  6. #6
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 51
    Par défaut
    Dans la liste des messages "warning", il y en a possiblement un (ou plusieurs) disant qu'une variable est utilisée avant d'être initialisée.
    La compilation me donne des warnings du type :
    - Warning: Line truncated at (1)
    - Warning: Nonconforming tab character at (1)
    - Warning: Label 3968 at (1) defined but not used
    - Warning: Unused variable 'err2' declared at (1)
    - Warning: Unused dummy argument 'icycno' at (1)

    Quel type de warning pourrait indiquer qu'une variable est utilisée avant d'être initialisée?

    Pour rappel, mon programme fonctionne parfaitement sous :
    - Linux Ubuntu 32bits, gfortran 4.4.3
    - Linux Ubuntu 64bits, gfortran 4.4.5 et l'option de compilation "m32"
    - Linux Centos 64bits, gfortran 4.4.4 et l'option de compilation "m32"

    J'essaie de faire fonctionner mon programme sous MacOS 10.6 64bit et gfortran 4.5.1.

    Merci par avance.

Discussions similaires

  1. Erreurs de segmentation !
    Par anti-conformiste dans le forum Applications et environnements graphiques
    Réponses: 16
    Dernier message: 18/10/2005, 11h11
  2. Erreur de segmentation
    Par Trunks dans le forum C
    Réponses: 3
    Dernier message: 06/10/2005, 18h28
  3. Erreur de segmentation (Inconnue)
    Par Dark-Meteor dans le forum C
    Réponses: 5
    Dernier message: 08/09/2005, 13h42
  4. [Dev-C++] Erreur de segmentation...
    Par sas dans le forum Dev-C++
    Réponses: 11
    Dernier message: 26/03/2005, 14h25
  5. erreur de segmentation
    Par transistor49 dans le forum C++
    Réponses: 10
    Dernier message: 15/03/2005, 11h18

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