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 :

une erreur du type Segmentation fault


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    post-doc
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : post-doc
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut une erreur du type Segmentation fault
    Bonjour,

    Lors de la compilation de mon programe je ne vois aucune erreure. Mais dés que je lance ce dernier je reçois un message d'erreur, plus précisément un "Segmentation fault". Comment identifier la partie du code qui pose problème?

    Merci d'avance
    bae84

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 87
    Points : 111
    Points
    111
    Par défaut
    en compilant en mode debug, sous gcc il faut compiler avec l'option -g.
    ensuite lancer le programme sous gdb, et quand le segfault arrive tu tapes bt pour voir d'où ca vient.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    post-doc
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : post-doc
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    J'ai oublié de le préciser mais je suis sous linux. lorsque je tape bt il me répond

    bt: command not found

    Y'aurais t-il une instruction équivalente sous linux ?

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 412
    Points : 149
    Points
    149
    Par défaut
    Je compile avec un makefile, ce que je te conseil de faire car sa te permet d'aprendre a gérer les lien et les inclusion de fichier

    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
    24
    25
    26
    27
     
    SRC=$(wildcard *.cpp)
    #SRC=main.cpp
    OBJ=${SRC:.cpp=.o}
    OUT=main
     
    CXX=c++
    CXXFLAGS=-Wall -Wextra -pedantic -D_FILE_OFFSET_BITS=64
    #CXXFLAGS=-lsqlite3 -Wall -Wextra -pedantic -static
     
     
    all: $(OUT)
     
    $(OUT): $(OBJ)
    	$(CXX) $^ -o $@ $(CXXFLAGS)
     
    .cpp.o:
     
    exe: all
    	./$(OUT) "sqlite3.sql"
     
    clean:
    	@rm -v *.o
    	true
     
    mrproper: clean
    	@rm $(OUT)
    sa compile automatiquement tou ce qui est dans le répertoire ou il ce trouve
    CXXFLAGS= les option son passer a gcc
    pour compile:
    $make
    pour effacer
    $make clean


    Pour le reste je te laisse un peux chercher car je connais pas encore bien les makefile.
    Ensuite tout dépend si tu utilise un ide complet a ce moment la tu peux gérer avec des points d'arrêt, personnellement je met des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::cout << "erreur" << std::endl;
    ou il faut, cela remplace une peux les points et permet de ce passer d'un ide lourd.

    après il existe peux être d'autre manière de faire avec un makfile ?

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par bae84 Voir le message
    Lors de la compilation de mon programe je ne vois aucune erreure. Mais dés que je lance ce dernier je reçois un message d'erreur, plus précisément un "Segmentation fault". Comment identifier la partie du code qui pose problème?
    Déjà, ne laisse traîner aucun warning de compilation (-Wall -Wextra).

    Remplace tes allocations dynamiques explicites par des std::vector. Remplace tes pointeurs nus par le pointeur intelligent adéquat (std::unique_ptr, std::shared_ptr).

    Ensuite, effectivement, compile en mode debug et debug ton programme pas à pas pour identifier où ton code plante.

    Tu peux aussi générer des traces à différents endroits de ton code où tu suspectes l'erreur.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 585
    Points : 1 562
    Points
    1 562
    Par défaut
    @base84
    Apparement tu ne connait pas gdb, je te conseil de chercher quelques tuto dessus (Lightness1024 a peut être été un peu trop rapide en explication). D'ailleur, je n'ai pas trouvé de tuto sur gdb sur developpez

    En gros, tu compile ton programme avec l'option -g, ensuite tu lance ton programme avec gdb:
    gdb monProg
    
    tu arrive devant un promp:
    (gdb)
    
    tu tape "r" (comme "run"), le programme se lance, crash, et là tu tape "bt" (comme "backtrack") pour afficher la pile au moment du crash.

    gdb est un debuggeur très puissant sous linux. Pas très entrainant à première vue, l'idéal est de le coupler avec un éditeur de texte (vim ou emacs font ça très bien) pour avoir un debuggeur un peu plus "user friendly" à la Visual Studio.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    post-doc
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : post-doc
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Merci pour vos conseil. J'ai trouver une tuto de gdb et ça marche

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 412
    Points : 149
    Points
    149
    Par défaut
    Merci sa va aussi me servir
    je met a utiliser eclipse, mai quelque souci de config arrive, un autre post est donc en court pour ne pas "polluer celui-ci"

  9. #9
    Futur Membre du Club
    Homme Profil pro
    post-doc
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : post-doc
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Points : 5
    Points
    5
    Par défaut une pseudo_explication du problème
    Bonjour,

    Je me rend compte que mon problème n'est pas lié a une erreur dans l'écriture du code. En effet, lorsque je lance gdb ./code puis run le debeugueur me dis que code s'excute normalement.

    Mais si je lance réellement ./code une erreur du type segmentation fault s'affiche. Ceci est due au fait que j'ai mal initié un paramètre (je fais de la simulation d'un phénomène physique et j'avais pris un pas de temps trop grand). Dés que je choisit le bon paramètre de manière acceptable mon code s'excute normalement.

    Voila, J'espere que ceci vous servira. J'invite ceux qui connaisse bien ce type d'erreur a nous fournir une explication plus rechercher

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/03/2009, 16h51
  2. Réponses: 2
    Dernier message: 23/01/2008, 23h10
  3. Problème avec une erreur de type [DCC Erreur]
    Par colorid dans le forum Langage
    Réponses: 5
    Dernier message: 24/09/2007, 21h04
  4. Zone de texte vide occasionne une erreur de type
    Par charleshbo dans le forum Access
    Réponses: 1
    Dernier message: 14/04/2006, 00h18
  5. [ERREUR D'EXECUTION] Segmentation Fault
    Par CestPasMoi dans le forum C++
    Réponses: 3
    Dernier message: 26/11/2005, 18h38

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