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 :

(debutant) Core Dumped ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 49
    Par défaut (debutant) Core Dumped ?
    Bonjour ... je voudrais savoir pourquoi ce code :

    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
     
    int main () {
      cout << "On cree les personnes suivantes\n";
      const char* prenoms1[] = {"Marcel", "Firmin", "Gaston", 0};
      const Personne marcel ("Meharcele",  prenoms1, 78);
      Afficher (marcel);
     
      const char* prenoms2[] = {"Lea", "Germaine", 0};
      const Personne lea ("Tralala",  prenoms2, 45);
      Afficher (lea);
     
      // et si vous aviez raté quelque chose sur le constructeur
      prenoms1[0] = "Claudia"; prenoms1[1] = 0;
      Personne claudia ("Choufleur",  prenoms1, 31);
      Afficher (claudia);
    l'entete de la classe Personne :
    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
     
    class Personne {
     
    public :
    Personne(const char* ,const char** ,int );
    const char* Nom() const;
    const char* PremierPrenom() const ;
    const char** TousLesPrenoms() const ;
    int Age() const ;
     
    private :
    const char* nom ;
    const char** prenoms;
    int age ;
     
    };
    avec ce constructeur dans la classe personne :
    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
     
    Personne::Personne(char* leNom , const char** lesPrenoms , int lage) {
     
     
    nom = strdup(leNom) ;
     
    int i=0;
    while(lesPrenoms[i] != 0) { i++;}
     
    int j=0;
    while (j != i) { 
    prenoms[j] = strdup(lesPrenoms[j]) ;;
    j++;
    }
    prenoms[j]=0;
     
    age = lage ;
     
    }
    provoque cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    On cree les personnes suivantes
     Firmin (Firmin, Gaston) Meharcele, 78 ans
     Germaine (Germaine) Tralala, 45 ans
    Erreur de segmentation (core dumped)
    Merci d'avance

  2. #2
    Membre émérite Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Par défaut
    Déjà le nom de l'erreur c'est "Erreur de segmentation", Core dump ça doit vouloir dire, mais je ne suis pas sur, qu'un fichier core (fichier d'erreur) a été écrit.

    Ensuite les erreurs de segmentation apparraissent trés souvent quand on commence à s'amuser avec les pointeurs: donc essaye de les éviter quand c'est possible.

    Tu peux les éviter en utilisant:
    - string à la place de char*
    - vector à la place des tableaux de base du langage

    Mais bon tout ça a déjà été dit des centaines de fois sur ce forum .

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 194
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while (j != i) { 
    prenoms[j] = strdup(lesPrenoms[j]) ;;
    j++;
    }
    prenoms[j]=0;

    tu n'alloue nulle part de la mémoire pour prenoms.
    et je crois sauf erreur de ma part qu'il y a des const en trop

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 49
    Par défaut
    tu n'alloue nulle part de la mémoire pour prenoms.
    et je crois sauf erreur de ma part qu'il y a des const en trop
    Je crois que strdup alloue lui meme la memoire pour la chaine de caracteres .

    Tu peux les éviter en utilisant:
    - string à la place de char*
    - vector à la place des tableaux de base du langage
    Non je peux pas , c'est dans le cadre d'un TP et le code dans le main je peux pas le changer

    Déjà le nom de l'erreur c'est "Erreur de segmentation", Core dump ça doit vouloir dire, mais je ne suis pas sur, qu'un fichier core (fichier d'erreur) a été écrit.
    Il se trouve où ce fichier ?

  5. #5
    Membre expérimenté
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Par défaut
    Coca25 parlait des "cases" pour prenoms (ton tableau) pas les chaines allouées par strdup.

    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
     
    Personne::Personne(char* leNom , const char** lesPrenoms , int lage) {
    nom = strdup(leNom) ;
     
    int i=0;
    while(lesPrenoms[i] != 0) { i++;}
     
    int j=0;
    prenoms = new char*[i+1]; // quelque chose comme ça à ajouter
    while (j != i) { 
    prenoms[j] = strdup(lesPrenoms[j]) ;;
    j++;
    }
    prenoms[j]=0;
     
    age = lage ;
     
    }
    Sinon, si tu ne veux pas utiliser vector,
    tu pourras toujours corriger les bugs ( pas de destructeur, constructeur de copie et affectation manquants)

    Si le main ne peut pas changer, change ta classe

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 49
    Par défaut
    oui j'avais pensé à mettre ce
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     prenom = new char*[i+1];
    mais le compilateur me dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    personne.cc: In constructor ‘Personne::Personne(const char*, const char**, int)’:
    personne.cc:13: error: ‘prenom’ was not declared in this scope
    make: *** [personne.o] Erreur 1

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

Discussions similaires

  1. Core Dump - Kernel
    Par jc_isd dans le forum Administration système
    Réponses: 5
    Dernier message: 22/01/2007, 17h54
  2. Réponses: 1
    Dernier message: 10/12/2006, 21h37
  3. Comment générer un core dump en c
    Par gege2061 dans le forum Linux
    Réponses: 3
    Dernier message: 12/11/2006, 15h33
  4. Problème de Core Dumped !
    Par KneXtasY dans le forum C
    Réponses: 8
    Dernier message: 24/12/2005, 13h11
  5. Segmentation fault (core dumped)
    Par Battosaiii dans le forum C
    Réponses: 13
    Dernier message: 25/11/2005, 18h36

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