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

 C Discussion :

segmentation fault error


Sujet :

C

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 257
    Points : 81
    Points
    81
    Par défaut segmentation fault error
    Bonjour à tous,
    Je suis novice en c.
    J'ai compilé mon programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     gcc -O2 -g -Wall -Wextra remove_bckground.c -o normalize
    Je n'ai aucune erreur ni aucun warning.
    Mais lorsque j'execute mon programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./normalize -i file.txt -o test.out
    J'ai l'erreur :
    J'ai donc fait quelques recherches sur internet, et j'ai trouvé gdb.
    J'ai donc fait puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    (gdb) run
    Starting program: ~/normalize
    ERROR: gene_length_mrna file is required.
    normalize -i gene_length_mrna_file  [-o output_coverage_file]
      -i: input gene_mRNA file.  tab-delimited. default: mandatory
      -o: output file. default: stdout
    Que puis je faire pour avoir plus de précision ?

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 195
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 195
    Points : 17 163
    Points
    17 163
    Par défaut
    ca dépend.
    Une erreur de segmentation vient de la lecture d'une valeur pointée par un pointeur invalide. Un des cas, c'est l'équivalent de *NULL.
    Il est aussi possible que ca soit lié au passage d'une chaine litérale ("ca, par exemple") en argument d'un char*.

    run déroule le programme qui va crasher. à l'arrivée, il faut demander la stacktrace, pour savoir dans quelle fonction ca a planté.
    à cause de l'option -O2, tu n'auras pas l'information sur la ligne de code précise.

    Mais si ton code est assez bien fait, les fonctions sont courtes.
    Tu pourras poser des breakpoints, qui te permettront d'avancer par étapes dans le programme, et de regarder les valeurs des variables.

    Tout cela est expliqué dans la documentation de gcc.

    Cela dit, une erreur de pointeur vient de ce que tu n'as pas assez de controle sur ceux que tu manipules.

  3. #3
    Membre régulier
    Inscrit en
    Janvier 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 257
    Points : 81
    Points
    81
    Par défaut
    Est il possible que je poste le programme pour avoir de l'aide ?

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 195
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 195
    Points : 17 163
    Points
    17 163
    Par défaut
    Le plus petit possible, pour qu'on ne soit pas perdu.
    En fait, le fait de réduire le programme au minimum (en gardant le bug) est un moyen de comprendre ce qu'il se passe.

    Dans tous les cas, utilise la balise [code] (le bouton #) ou [codeinline]=[c].

  5. #5
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 037
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 037
    Points : 8 403
    Points
    8 403
    Par défaut
    salut,

    Citation Envoyé par Isabella83 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    (gdb) run
    Starting program: ~/normalize
    ERROR: gene_length_mrna file is required.
    normalize -i gene_length_mrna_file  [-o output_coverage_file]
      -i: input gene_mRNA file.  tab-delimited. default: mandatory
      -o: output file. default: stdout
    Que puis je faire pour avoir plus de précision ?
    c'est pourtant clair non ? en lançant juste run c'est comme si tu lançais ./normalize sans aucun paramètre, hors comme tu précisais plus haut et comme le programme te le dit aussi dans gdb, il faut passer un fichier gene_length_mrna_file avec le switch -i au minimum, donc pour reprendre ton exemple, dans gdb il faut que tu tapes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (gdb) run -i file.txt -o test.out
    du coup une question horrible pop à mon esprit; est-ce que tu sais au moins ce qu'est censé faire le code que tu compiles et est-ce que le fichier file.txt contient bien ce qu'il devrait contenir ? si ce n'est pas le cas ton segfault provient certainement de là, le programme attend un fichier formaté de manière spécifique

  6. #6
    Membre régulier
    Inscrit en
    Janvier 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 257
    Points : 81
    Points
    81
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    du coup une question horrible pop à mon esprit; est-ce que tu sais au moins ce qu'est censé faire le code que tu compiles et est-ce que le fichier file.txt
    Oui je sais ce que fait mon code, et oui le fichier avait le bon format.
    J'avais seulement une erreur lors de la déclaration d'un pointeur.

  7. #7
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 037
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 037
    Points : 8 403
    Points
    8 403
    Par défaut
    Citation Envoyé par Isabella83 Voir le message
    Oui je sais ce que fait mon code
    ça aurait pu être un code trouvé sur le net, c'était pas précisé ^^

    ravi d'avoir pu aider en tous cas...

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/03/2014, 15h48
  2. Réponses: 9
    Dernier message: 23/10/2007, 20h18
  3. [REDHAT] Segmentation fault systematique
    Par mela dans le forum RedHat / CentOS / Fedora
    Réponses: 2
    Dernier message: 21/09/2004, 06h05
  4. Réponses: 13
    Dernier message: 13/07/2004, 15h41
  5. Comment contrer la "segmentation fault" ?
    Par guillaume_pfr dans le forum C
    Réponses: 15
    Dernier message: 08/08/2003, 13h43

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