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 à la lecture d'un fichier


Sujet :

Fortran

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 55
    Points : 43
    Points
    43
    Par défaut Erreur à la lecture d'un fichier
    J'utilise un open pour écrire dans un fichier. Ma commande est la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    open(40,file=filetypo, STATUS='NEW', iostat=indicerr, err=350)
    Le nom du fichier, filetypo, est correct. Il n'existe pas donc il doit etre créé. J'ai ajouté une étiquette d'erreur mais le programme n'y va pas.
    Il met simplement un segmentation fault à l'exécution.

    Est ce que ça peut venir de l'ouverture du fichier, ou est ce que c'est plutot une erreur due à un mauvais tableau qui ferait planter à cet endroit là?

    Merci

  2. #2
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Tiens, la question Fortran du vendredi par sebduth

    A priori, ton appel a OPEN est correct (si indicerr est bien un INTEGER). Tu peux essayer de preciser unit=40 plutot que 40 tout seul, mais ca ne devrait rien changer.

    La faute de segmentation doit venir d'ailleurs (plantage a partir du label 350, atteint en cas d'erreur? tentative de lecture alors que le fichier est ouvert en ecriture? autre probleme completement independant?).

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 55
    Points : 43
    Points
    43
    Par défaut
    Oui, désolé mais je fais bcp de Fortran (qui est un langage super soit dit en passant, sauf quand ça plante!... )
    Merci au passage, j'ai remarqué que c'était toujours qui me répondait!

    Je penche plutot pour la troisième possibilité, puisque j'ai extrait mon code et que j'ai l'ai fait tourné tout seul sans problème.
    Ce qui m'étonne, c'est que si je mets toute la partie où j'écris dans le fichier en commentaires, il plante plus loin à une autre ouverture de fichier!
    Mais comme je gère à côté beaucoup de tableaux dynamiques, ça doit venir de là.

    Je voulais juste savoir si ç'était possible de déclencher une erreur de segmentation en ouvrant un fichier.

    Autre question:
    On peut bien utiliser le meme unit pour des fichiers différents dans le meme programme si on ferme le premier avant d'ouvrir le deuxième (en gros, ma commande open est dans une boucle, et j'incrémente le nom du fichier)?

  4. #4
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Ce qui m'étonne, c'est que si je mets toute la partie où j'écris dans le fichier en commentaires, il plante plus loin à une autre ouverture de fichier!
    Mais comme je gère à côté beaucoup de tableaux dynamiques, ça doit venir de là.
    Oui, si le plantage arrive a des points differents du programme, c'est symptomatique d'une erreur "silencieuse". Tres souvent, il s'agit d'un depassement des limites d'un tableau, qui ecrase la valeur des octets situes derriere (ou devant). Il va falloir verifier tes indices de tableau, ce qui est un peu penible. Certains compilateurs disposent de l'option -C qui fait de l'automatic bound checking (ce qui ralentit grandement l'execution). Comme tes tableaux sont alloues dynamiquement, ce n'est peut-etre pas possible.

    Je voulais juste savoir si ç'était possible de déclencher une erreur de segmentation en ouvrant un fichier.
    Si le depassement de tableau a ecrase une variable impliquee dans l'ouverture du fichier, oui.
    On peut bien utiliser le meme unit pour des fichiers différents dans le meme programme si on ferme le premier avant d'ouvrir le deuxième (en gros, ma commande open est dans une boucle, et j'incrémente le nom du fichier)?
    Oui, sans aucun probleme. Il faut juste ne pas oublier de fermer l'unite apres utilisation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    OPEN(unit=20, file='toto.dat')
    ! on utilise toto.dat
    CLOSE(20)
     
    OPEN(unit=20, file='titi.dat')
    ! on utilise titi.dat
    CLOSE(20)

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 30/12/2011, 22h14
  2. erreur lors du lecture d'un fichier excel
    Par pato1989 dans le forum Général Java
    Réponses: 3
    Dernier message: 31/03/2011, 12h35
  3. erreur dans la lecture d'un fichier
    Par membreComplexe12 dans le forum C++
    Réponses: 1
    Dernier message: 19/02/2011, 12h53
  4. Réponses: 15
    Dernier message: 31/03/2007, 16h32
  5. Erreur de lecture dans un fichier
    Par acieroid dans le forum C++
    Réponses: 9
    Dernier message: 30/04/2006, 20h39

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