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 :

Aborted (core dumped)


Sujet :

C++

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 428
    Points : 170
    Points
    170
    Par défaut Aborted (core dumped)
    Bonsoir,
    j'apprends actuellement le C++ sur la chaine "Un prof très spécial" de Jacques-Olivier Lapeyre

    J'ai fait exactement comme lui pour le code mais à la différence c'est que j'ai un corps dumped.

    je vous donne le code du main, .h .cc

    Le main :

    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
     
    #include <iostream>
    #include <string>
     
    #include "intarray.h"
     
    int main ()
    {
      using namespace std;
      extintarray A=extintarray(15,15);
      for(int i=0;i<A.length();i++)
        {
          A.set(i,i*5);
          cout<<A.get(i)<<" ";
        }
      cout<<endl;
     
      return 0;
    }

    Le .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
    34
    35
    36
    37
    38
    39
    #ifndef INTARRAY_H
    #define INTARRAY_H
     
    #include <iostream>
    #include <string>
     
    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 
    {
     private :
      int alloc;
     protected :
      void alloc_more (int newsize);
     public :
      extintarray (); 
      extintarray (int alloc); 
      extintarray (int len, int alloc);
      ~extintarray ();
      void set (int index, int n); 
    };
     
    #endif
    le .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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    #include "intarray.h"
     
    std::ostream & operator<< (std::ostream & o, intarray & A)
    {
      for (int i = 0; i <= A.len - 2; i++)
        o << A.data[i] << ", ";
      o << A.data[A.len - 1];
      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;
    }
     
    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;
    }
     
    void extintarray::set (int index, int n)
    {
      if (index >= this->alloc)
        this->alloc_more (index * 2);
     
      if (index >= this->len)
        this->len = index + 1;
     
      this->data[index] = n;
    }
     
    void extintarray::alloc_more (int newsize)
    {
      int* new_data = new int[newsize];
      for (int i = 0; i < this->len; i++)
        new_data[i] = this->data[i];
      delete[] this->data;
      this->data = new_data;
      this->alloc = newsize;
    }

  2. #2
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 562
    Points : 7 628
    Points
    7 628
    Par défaut
    Bonjour, et bonne année

    la data est libérée 2 fois lors de la destruction car elle faite dans ~intarray() mais aussi dans ~extintarray().

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 428
    Points : 170
    Points
    170
    Par défaut
    Bonne année à toi aussi , merci beaucoup pour la réponse!

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 113
    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 113
    Points : 32 958
    Points
    32 958
    Billets dans le blog
    4
    Par défaut
    - data est propre à intarray, tu ne devrais jamais l'utiliser dans extarray
    - en fait tu ne devrais jamais avoir à utiliser des membres de classe mère dans une classe fille
    - réinitialiser les pointeurs à nullptr après désallocation aide à limiter ce genre d'étourderie et est souvent une bonne pratique
    - les initialiser au départ à nullptr est aussi une bonne pratique
    - utiliser vector serait plus sûr que des pointeurs nus qui n'apportent rien ici
    - je ne saisie pas la logique du truc, len, alloc ?
    - quitte à avoir des pointeurs nus, dans alloc_more autant faire un memcpy ou memmove
    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
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Je rajouterai que héritage et copie ne font pas bon ménage. Mais alors pas du tout.
    A noter aussi que l'affectation n'a pas été blindée, et que le code n'est pas const-correct.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 428
    Points : 170
    Points
    170
    Par défaut
    Merci pour vos réponses ; désolé pour mon message tardif.
    @Bousk : len et alloc servent pour un tableau redimensionnable donc alloc c'est l'allocation du tableau on alloue une certaine taille et len c'est le nombre de case du tableau qui sont remplie.
    Donc par exemple on peut avoir une alloc de taille 10 donc notre tableau aura 10 case et une len de 7 ou il y aura 7 case d'utiliser ; les 3 dernières case seront vides en faite.

    @Luc Hermitte : quand en tu par l'affectation n'a pas été blindée et que le code n'est pas const-correct ?

  7. #7
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    > qu'entends-tu par l'affectation n'a pas été blindée ?

    J'entends que
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    extarray a1 (....);
    extarray a2;
    a2 = a1;
    Ne peut que planter. Le problème est traité pour la copie (`extarray A2 = a1;`), mais pas pour l'affectation.

    Maintenant à cause de l'héritage, il est impossible d'écrire une affectation correcte. Bref, vire l'héritage public.

    > et que le code n'est pas const-correct ?

    j'entends que tu ne pourras jamais écrire parce qu'il n'y a aucun const
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    extarray f() {
       extarray a (....);
       return a;
    }
     
    ....
    std::cout << f();
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 428
    Points : 170
    Points
    170
    Par défaut
    Merci pour ta réponse c'est quand même vachement chelou le C++ c'est vraiment un langage difficile à comprendre je trouve. Le C est quand même plus facile et quand je pense qu'on dit du C que c'est un langage qui est difficile à apprendre.

  9. #9
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Tout dépend de ce que tu as besoin de faire. En C, tu as moins de mots pour exprimer plein de choses. En C++ tu as plus de mots. Tu vas apprendre plus vite les mots du C, mais ce n'est pas pour autant que tu vas savoir les manipuler correctement.

    PS: const existe aussi en C., et les dangling pointers aussi. Sauf qu'en C++ on ne veut pas gérer des pointeurs à la main, et c'est possible.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 428
    Points : 170
    Points
    170
    Par défaut
    ok

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

Discussions similaires

  1. (debutant) Core Dumped ?
    Par pouic06 dans le forum Débuter
    Réponses: 8
    Dernier message: 09/11/2008, 14h01
  2. Réponses: 1
    Dernier message: 10/12/2006, 22h37
  3. Comment générer un core dump en c
    Par gege2061 dans le forum Linux
    Réponses: 3
    Dernier message: 12/11/2006, 16h33
  4. Problème de Core Dumped !
    Par KneXtasY dans le forum C
    Réponses: 8
    Dernier message: 24/12/2005, 14h11
  5. Segmentation fault (core dumped)
    Par Battosaiii dans le forum C
    Réponses: 13
    Dernier message: 25/11/2005, 19h36

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