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 :

Erreur de segmentation (core dumped)


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2017
    Messages : 2
    Par défaut Erreur de segmentation (core dumped)
    Bonjour,

    Je suis en train de coder un type Mot et son Test Unitaire (trouvés plus bas). Lors de la compilation les 2 compilent sans aucun problème mais dés que j'essaye de tester le TU j’obtiens ce message d'erreur :
    " Test: MOT_creationMot ...Erreur de segmentation (core dumped) "
    Je n'arrive pas me rendre compte d’où vient le problème ...

    Merci MotTU.cMot.cMotTU.cMot.c

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Une erreur de segmentation survient lorsque le programme tente d'accéder à une zone de la mémoire qui ne lui est pas réservée. Les causes possibles sont nombreuses.

    Colle ton code entre deux balises [code].

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2017
    Messages : 2
    Par défaut
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    #include <stdlib.h>
    #include <assert.h>
    #include <string.h>
    #include <ctype.h>
    #include "Mot.h"
     
     
     
    MOT_Mot MOT_creationMot(char* chaine){
        assert( strlen(chaine)>0 );
        MOT_Mot unMot;
        unsigned int i;
        unMot.mot=NULL;
        strcpy(unMot.mot,chaine);
        unMot.longueur=strlen(unMot.mot);
        for (i=0; i<unMot.longueur; i++) {
             unMot.mot[i]=toupper(unMot.mot[i]);
        }
        return unMot;
     }
     
     
    unsigned int MOT_longueur(MOT_Mot unMot){
        return unMot.longueur;
    }
     
     
    char MOT_iEmeLettre(MOT_Mot unMot, unsigned int pos){
    	 assert(pos<MOT_longueur(unMot));
    	 return unMot.mot[pos];
    }
     
     
     
    void MOT_insererCaractere(MOT_Mot* unMot, char caractere, unsigned int pos){
        assert(pos<MOT_longueur(*unMot));
        unsigned int i;
        for(i=unMot->longueur;i>=pos;i--){
    	     unMot->mot[i+1]=unMot->mot[i];
         }
        unMot->mot[pos]=caractere;
        unMot->longueur=unMot->longueur+1;
    }
     
    void MOT_supprimerCaractere(MOT_Mot* unMot, unsigned int pos){
        assert(pos<MOT_longueur(*unMot) && MOT_longueur(*unMot)>1);
        unsigned int i;
        for(i=pos;i<=strlen(unMot->mot);i++){
    	   unMot->mot[i]=unMot->mot[i+1];
       }
        unMot->longueur=unMot->longueur-1;
    }
     
    void permuter_ch(char * a, char * b)
    {
       char k;
       k=*a;
       *a=*b;
       *b=k;
    }
    void MOT_echangerCaractere(MOT_Mot* unMot, unsigned int pos1, unsigned int pos2){
        assert(pos1<MOT_longueur(*unMot) && pos2<MOT_longueur(*unMot) && MOT_longueur(*unMot)>1);
        permuter_ch(&unMot->mot[pos1],&unMot->mot[pos2]);
    }
     
    int MOT_estIdentique(MOT_Mot premierMot,MOT_Mot deuxiemeMot){
     
    unsigned int n;
       if (MOT_longueur(premierMot)!=MOT_longueur(deuxiemeMot))
        	return 0;
       else { n=strlen(premierMot.mot);
              if ( premierMot.mot[n]!= deuxiemeMot.mot[n]){
    		return 0;}
    	  else {
    		if (n>1){
          MOT_supprimerCaractere(&premierMot,n);
          MOT_supprimerCaractere(&deuxiemeMot,n);
          return MOT_estIdentique(premierMot,deuxiemeMot);
        }
    		else
    			return 1;
    	      }
             }
    }
    char*  MOT_motEnChaine(MOT_Mot unMot){
        unsigned int i;
        char* chaine=(char*)malloc(sizeof(unMot.longueur));
        chaine="";
     
        for(i=1;i<=unMot.longueur;i++){
          chaine[i]=unMot.mot[i];
        }
        return chaine;
    }

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    Par défaut
    Bonjour
    strcpy nécessite que le buffer cible soit alloué. Il te manque un malloc.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Par défaut
    Bonjour, comment est défini le champ mot dans ton type MOT_Mot ?
    Si c'est juste un char *, comme le dis ternel, tu dois faire un malloc avant ton strcpy(unMot.mot,chaine);
    Quelque chose du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    unMot.mot=(char *)malloc((strlen(chaine)+1)*sizeof(char));//le +1 est pour pouvoir stoker le\0 de fin de chaine

Discussions similaires

  1. Erreur de segmentation (core dumped)
    Par benja507 dans le forum Débuter
    Réponses: 11
    Dernier message: 14/05/2008, 17h37
  2. Erreur de segmentation (core dumped)
    Par mansour67 dans le forum wxWidgets
    Réponses: 3
    Dernier message: 05/03/2008, 18h11
  3. Réponses: 6
    Dernier message: 14/01/2008, 16h47
  4. erreur de segmentation core dumped
    Par panganino dans le forum Langage
    Réponses: 2
    Dernier message: 03/01/2008, 12h45
  5. Réponses: 5
    Dernier message: 04/11/2007, 13h39

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