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 :

Eradiquer le segmentation fault ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 309
    Par défaut Eradiquer le segmentation fault ?
    J'ai un programme qui devrait vraiment fonctionner. Il compile sans problème mais l'execution me retourne un terrifiant Segmentation Fault.

    J'aimerais savoir ce que c'est et comment l'éviter.

    Ma seule technique pour l'instant était de modifier entièrement le programme. Mais je préfèrerais savoir comment construire un programme qui n'aboutira pas à cette erreur. (j'en ai marre de trembler devant le Segmentation Fault à chaque fois que je veux exécuter un nouveau programme).

  2. #2
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Et bien, il faut de la méthode et de la rigueur dans la gestion des pointeurs et des tableaux, pour ne pas faire de dépassement, ne pas manipuler n'importe comment des pointeurs nuls...

  3. #3
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Vérifie aussi tes retours de malloc/calloc/realloc à chaque fois, ca te permet de prévenir ce genre d'erreur également !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  4. #4
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Il compile sans problème mais l'execution me retourne un terrifiant Segmentation Fault.
    Ca part mal ... Utilises toutes les options de compilation, tu y trouveras peut être des erreurs et des warnings à la compilation (saches que je considère qu'un warning est à 80% une erreur)

    Ma seule technique pour l'instant était de modifier entièrement le programme.
    Oui ça parait logique, un segfault n'est pas une fonctionnalité "normale" de ton logiciel (ou bien tu as un cahier des charges plutôt bizarre ...)

    Mais je préfèrerais savoir comment construire un programme qui n'aboutira pas à cette erreur.
    Tu voudrais donc masquer un erreur qui est à mon avis grossière, ça n'est pas une bonne idée du tout.

    j'en ai marre de trembler devant le Segmentation Fault à chaque fois que je veux exécuter un nouveau programme
    Si tu comprends pourquoi ton programme provoque un segfault, tu pourras donc corriger cette erreur et ne plus avoir de plantage du tout.

    Si tu veux comprendre pourquoi ton programme plante, postes nous ton code, on pourra t'aider.

    Il existe des solutions (que je ne recommande pas) qui permettent de masquer des signaux qui peuvent provoquer des segfault, mais je ne VEUX pas te les donner puisque ça serait programmer "comme un porc".

    Le langage C n'est pas un langage fait pour la "bidouille" !

  5. #5
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Ah oué et puis : faire de vrais tests unitaires et d'intégration, avec un débuggeur.
    Pour renchérir sur ce qui a été dit plus haut : si on laisse un warning, savoir exactement pourquoi on le fait.

  6. #6
    Membre chevronné
    Avatar de joellel
    Profil pro
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Par défaut
    Citation Envoyé par Tymk
    l'execution me retourne un terrifiant Segmentation Fault.
    J'aimerais savoir ce que c'est
    Ton programme essaie d'accéder à un segment de mémoire auquel il n'a pas le droit (mémoire d'un autre programme ou son propre code). Donc, tu te fais jeter
    Les causes classiques:
    --> débordement dans un tableau
    --> déclaration d'une variable pointeur et utilisation de celle ci sans l'avoir initialisée avec une valeur correcte (oubli du malloc, en général)

  7. #7
    Nouveau candidat au Club
    Inscrit en
    Juin 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 2
    Par défaut Valgrind...
    A mon avis, tu devrais compiler ton programme avec les options de débuggages max, à savoir: -g et -O0

    Et ensuite lancer ton programme en utilisant Valgrind, ce qui devrait te permettre de savoir les endroits de ton code qui posent problème.

    Sinon il y a toujours GDB qui te permet, en chargeant les coredumps de te donner la pile d'appel de fonction au moment du crash.

  8. #8
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Et ensuite lancer ton programme en utilisant Valgrind, ce qui devrait te permettre de savoir les endroits de ton code qui posent problème.
    Encore faut-il avoir un système sur lequel valgrind tourne ...

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 309
    Par défaut
    Merci à tous,
    J'ai finalement repensé tout mon algorithme et ça marche. Je doit avouer que l'algrithme final paraît bien mieux organisé que l'ancien.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2006
    Messages : 138
    Par défaut
    Ca n'explique toujours pas pourquoi tu avais un Segmentation fault.
    ........ Ce serais un bon exercice d'essayer de trouver d'ou il venais car si un jour tu en a un autre tu refera de nouveau tout ton programme en priant que le segmantation fault disparaisent.

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

Discussions similaires

  1. Pb segmentation fault avec glutinit()
    Par pipistrelle dans le forum GLUT
    Réponses: 2
    Dernier message: 17/11/2004, 23h17
  2. [SDL_Image] Img_Load : segmentation fault ....
    Par Mathieu.J dans le forum OpenGL
    Réponses: 6
    Dernier message: 19/10/2004, 23h52
  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