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 :

Core dumped et héritage de classe


Sujet :

C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 431
    Points : 172
    Points
    172
    Par défaut Core dumped et héritage de classe
    Bonjours, je viens à vous car j'ai un core dumped et je n'arrive pas a voir ou est le problème.

    je débute en C++, je suis les cours de CodeurPlusPlus sur youtube et j'ai fait exactement comme lui j'ai repris ces sources et je suis à l'dentique pour le code.

    Le problème vient de l'héritage si je n'utilise pas les fonctions d'héritage donc si je fais comme ça :

    ça marche, mais quand je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extintarray A=extintarray();
    Là ça me fait un core dumped.
    J'ai un makefile mais je penses pas que ça vienne de là.
    Je suis sous cygwin version3 et j'ai essayer cygwin version4 c'est pareille.

    Je vous met tout le code le test_array.cc le intarray.cc et le intarray.h

    intarray.h :

    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
     
    #ifndef __INTARRAY_H__
    #define __INTARRAY_H__
     
    const int INTARRAY_DEFAULT_ALLOC = 1024;
    const int INTHEAP_DEFAULT_ALLOC = 1024;
     
    class intarray{
     protected: 
      int len; 
      int *data;
     public:
      intarray();
      intarray(int len);
      intarray(const intarray &A);
      ~intarray();
      int get(int index);
      void set(int index, int n);
      int length();
      friend std::ostream & operator<<(std::ostream & O,intarray & A);
    };
     
    class extintarray : public intarray  {
     protected: 
      int alloc;
     public:
      extintarray();
      extintarray(int alloc);
      extintarray(int len,int alloc);
      ~extintarray();
    };
     
    #endif
    Le intarray.cc :

    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
     
    #include<iostream>
     
    #include"intarray.h"
     
     
    std::ostream &operator<<(std::ostream &O, intarray &A)
    {
      for(int i=0;i<A.len;i++)
        O<<A.data[i]<<" ";
      return O;
    }
     
    intarray::intarray(const intarray &A)
    {
      this->len=A.len;
      this->data=new int[A.len];
      for(int i=0;i<A.len;i++)
        this->data[i]=A.data[i];
    }
     
    int intarray::length()
    {
      return this->len;
    }
     
    intarray::intarray()
    {
      this->len=INTARRAY_DEFAULT_ALLOC;
      this->data=new int[INTARRAY_DEFAULT_ALLOC];
    }
     
    intarray::intarray(int len)
    {
      this->len=len;
      this->data=new int[len];
    }
     
    intarray::~intarray()
    {
      delete[] this->data;
    }
     
    int intarray::get(int index)
    {
      return this->data[index];
    }
     
    void intarray::set(int index, int n)
    {
      this->data[index]=n;
    }
     
    /**********class héritage***********************************/
     
    extintarray::extintarray ()  : intarray () 
    {
      this->alloc = INTARRAY_DEFAULT_ALLOC;
    }
     
    extintarray::extintarray (int alloc)
    {
      this->len = 0;
      this->alloc = alloc;
      this->data = new int[alloc];
    }
     
    extintarray::extintarray (int len, int alloc)
    {
      this->len = len;
      this->alloc = alloc;
      this->data = new int[alloc];
    }
     
    extintarray::~extintarray() 
    {
      delete[] this->data;
    }
    Et le test_array.cc :

    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
     
    #include<iostream>
    #include<string>
     
    #include"intarray.h"
     
     
    int main(int argc, std::string argv[])
    {
      using namespace std;
      extintarray A=extintarray(); //marche pas. Par contre si je met : intarray A=intarray(); ça marche.
     
      /*for(int i=0;i<A.length();i++)
        {
          A.set(i,i*5);
          cout<<A.get(i)<<" ";
          }*/
      /*intarray B=intarray(A);
      cout<<A;
      cout<<endl;
      cout<<B;*/
      argc=0; argv=0;
      return 0;
    }

    Merci par avance pour votre aide.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Salut,

    tu as oublié le constructeur par copie de extintarray.
    Il te manque aussi les opérateurs= de chacune des classes.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 431
    Points : 172
    Points
    172
    Par défaut
    Merci pour ta réponse.

    C'est quoi les opérateurs = de chacune des class ou se positionne t-il ?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 431
    Points : 172
    Points
    172
    Par défaut
    ok merci

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 431
    Points : 172
    Points
    172
    Par défaut
    Et comment sa ce concrétise dans mon code ??
    Je rapels je débute à peine ou dois-je mettre ce fameux opérateur dans la class ou dans la class héritage ??

    Merci par avance.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Ben..
    Citation Envoyé par Bousk Voir le message
    les opérateurs= de chacune des classes.
    les 2.

    Cela dit, ceci est juste mauvais mais pas la source réelle du problème. Juste quelque chose qui te pètera à la tronche plus tard si c'est pas fait.
    Mais tu libères la mémoire de ton tableau dans le destructeur de ta classe dérivée.
    En fait tu fais n'importe quoi dans ta classe dérivée, elle ne devrait pas manipuler de la sorte le contenu de la classe de base.
    Et je parle pas des problèmes de const-correctness ou des fuites mémoires que tu as déjà.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 431
    Points : 172
    Points
    172
    Par défaut
    Merci pour ta réponse en faite je suis les cours de CodeurPlusPlus sur Youtube donc je fais la même chose que lui.
    Comme je débute et que je ne connais pas le C++, je suis bien obligé de faire comme je vois.

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 431
    Points : 172
    Points
    172
    Par défaut
    Mais tu libères la mémoire de ton tableau dans le destructeur de ta classe dérivée.
    OK merci à toi sa venait de ça j'ai supprimé le destructeur de ma class héritage et sa compile.

    Merci beaucoup pour ton aide.

    Cela dit, ceci est juste mauvais mais pas la source réelle du problème. Juste quelque chose qui te pètera à la tronche plus tard si c'est pas fait.
    Désolé je ne comprends pas cette phrase vue que je débute.

    En fait tu fais n'importe quoi dans ta classe dérivée, elle ne devrait pas manipuler de la sorte le contenu de la classe de base.
    En faite c'est pas moi qui ai écrit ce code c'est le code de CodeurPlusPlus que j'ai recopié au fure et a mesure de ces cours vidéo d'apprentissage du C++ qu'il fait sur youtube.
    Ok désolé encore mais je n'ai pas assez de recule pour bien comprendre ce que tu dit et ce que cela implique.

    Et je parle pas des problèmes de const-correctness

    ou des fuites mémoires que tu as déjà.
    Désolé encore je débute en C++ donc pour les fuite de mémoire je sais pas je comprends pas si tu me parle du C les fuite de mémoire je comprends y pas de problème mais en C++ je sais pas.

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par hbx360 Voir le message
    OK merci à toi sa venait de ça j'ai supprimé le destructeur de ma class héritage et sa compile.
    Vu que tu n'as rien de spécial à faire en détruisant un ext, le destructeur par défaut suffira oui.
    Btw, ton destructeur devrait être virtuel, ça va le plus souvent de pair avec l'héritage.

    Citation Envoyé par hbx360 Voir le message
    Désolé je ne comprends pas cette phrase vue que je débute.
    Ca veut dire texto ce que c'est écrit : là tout de suite c'est pas (vraiment) grave, mais plus tard en manipulant tes objets tu auras les mêmes problèmes de core dump.
    Et plus tard serait maintenant si ton compilo n'optimise pas cette initialisation par un simple appel au constructeur mais utilise l'opérateur=.

    Citation Envoyé par hbx360 Voir le message
    En faite c'est pas moi qui ai écrit ce code c'est le code de CodeurPlusPlus que j'ai recopié au fure et a mesure de ces cours vidéo d'apprentissage du C++ qu'il fait sur youtube.
    Entre nous, si c'est vraiment ça qui est écrit dans son cours, vaudrait mieux en trouver un autre.
    Un cours qui montre un core dumped, ça fait pas rêver

    const-correctness : http://cpp.developpez.com/faq/cpp/?p...apres-leur-nom

    Citation Envoyé par hbx360 Voir le message
    Désolé encore je débute en C++ donc pour les fuite de mémoire je sais pas je comprends pas si tu me parle du C les fuite de mémoire je comprends y pas de problème mais en C++ je sais pas.
    Que tu sois en C, C++, ou peu importe, une fuite mémoire c'est toujours une fuite mémoire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    extintarray::extintarray (int alloc)
    {
      this->len = 0;
      this->alloc = alloc;
      this->data = new int[alloc];
    }
     
    extintarray::extintarray (int len, int alloc)
    {
      this->len = len;
      this->alloc = alloc;
      this->data = new int[alloc];
    }
    L'appel au constructeur par défaut de intarray est implicite. Un breakpoint ou trace te l'assurera.
    Dans ce constructeur par défaut tu alloues déjà data, puis ici tu le réalloues, sans libérer le précédent : fuite.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 431
    Points : 172
    Points
    172
    Par défaut
    Merci d'avoir pris le temps de répondre.
    Je comprends mieux et pour la fuite de mémoire aussi c'est plus claire.

    Entre nous, si c'est vraiment ça qui est écrit dans son cours, vaudrait mieux en trouver un autre.
    Un cours qui montre un core dumped, ça fait pas rêver
    En faite dans son cours chez lui sa compile c'est ça que je trouve bizarre.

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Un core dumped c'est une erreur d'exécution, pas de compilation.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 431
    Points : 172
    Points
    172
    Par défaut
    Ha OK merci pour la l'info

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

Discussions similaires

  1. Héritage de classes.
    Par Berzerk_ dans le forum C++
    Réponses: 48
    Dernier message: 13/08/2006, 23h48
  2. [POO] Héritage vs classe dans une classe
    Par robichou dans le forum Langage
    Réponses: 4
    Dernier message: 06/08/2006, 23h51
  3. Problème de Core Dumped !
    Par KneXtasY dans le forum C
    Réponses: 8
    Dernier message: 24/12/2005, 13h11
  4. Segmentation fault (core dumped)
    Par Battosaiii dans le forum C
    Réponses: 13
    Dernier message: 25/11/2005, 18h36
  5. [OO] Héritage - Mixins Classes
    Par djmalo dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 01/03/2005, 23h16

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