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 destructeur [Débutant(e)]


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de FidoDido®
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 101
    Par défaut Erreur de destructeur
    Salut,
    Je ne vous mets pas tout le code car c'est carrément trop long, mais j'ai une erreur que je n'arrive pas à m'expliquer.
    J'ai un ensemble de classes qui interagissent entre elles. Dans une de mes méthodes, je déclare une instance d'une de mes classes, et j'effectue des calculs grâce aux attributs de l'instance.
    A la sortie de cette méthode, l'instance est donc supprimée par le destructeur de la classe qui ressemble à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Interpol::~Interpol() {
            cout << "entree" << endl;
           delete[] coeff;
           cout << "sortie" << endl;
    }
    sachant que le .hpp de la classe est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class Interpol{
    public:
         Interpol();
         ~Interpol();
         void calcul(double * t, doublue * y, int n);
     
    private:
         double * coeff;
         int nbpoints;
    };
    le truc c'est que j'ai bien le message "entree" qui apparait, mais pas le "sortie"

    Je ne comprends donc pas comment je peux planter sur une instruction comme celle-ci...

    Merci pour votre aide !

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Tu veux dire que c'est le delete qui plante (si tu le retires tu vois "sortie" ?) ? Comment est manipulé ton tableau coeff dans la classe ? Pourquoi tu n'utilises pas un std::vector<double> ?

  3. #3
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 294
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    une fois de plus, si tu avais utilisé un conteneur stantard (un std::vector ici en l'occurence), tu n'aurais sans doute pas rencontré ce problème.

    Car si ça plante sur ton delete, c'est que ton tableau n'est pas valide au moment du delete [].
    Es-tu certain qu'il a été alloué?
    N'a-t-il pas été désalloué ailleurs? (avant ce delte [] )

    edit:grilled

  4. #4
    Membre confirmé Avatar de FidoDido®
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 101
    Par défaut
    si je retire le delete[] coeff ça plante qd même...

    Donc je suppose que j'ai un pb de mémoire avant cela, mais je ne comprends pas d'où il peut venir.

    Je n'ai pas utilisé de std::Vector pcq je ne connaissais pas...

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    D'ailleurs, pour enfoncer encore un peu le clou (et peut-être que c'est la cause du plantage), ta classe gère une ressource brute qui ne peut être copiée trivialement, or elle ne définit ni constructeur par copie ni opérateur d'affectation. Résultat : si tu copies une instance de ta classe, son membre coeff va pointeur sur un tableau géré par une autre instance, et le second qui va tenter de le détruire va crasher.

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Donc je suppose que j'ai un pb de mémoire avant cela, mais je ne comprends pas d'où il peut venir.
    Tu n'as pas un débogueur sous la main ?

  7. #7
    Membre confirmé Avatar de FidoDido®
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 101
    Par défaut
    nope

  8. #8
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 294
    Billets dans le blog
    2
    Par défaut
    Arf, sans débuggeur, ça va être difficile de débugguer un bug tel que celui-ci.
    Le plus simple serait que tu remplaces ton tableau par un vecteur (voir cette faq), comme ça tu ne devrais plus avoir de problème (ça résous même le problème du constructeur par copie).

Discussions similaires

  1. [Langage/Algorithme] Codeguard erreur sur destructeur
    Par Pascale38 dans le forum C++Builder
    Réponses: 11
    Dernier message: 15/06/2012, 15h24
  2. Réponses: 15
    Dernier message: 08/03/2009, 14h37
  3. erreur de compilation dans mon destructeur
    Par zeder59 dans le forum Débuter
    Réponses: 1
    Dernier message: 25/01/2009, 11h21
  4. Réponses: 6
    Dernier message: 31/03/2008, 18h17
  5. Erreur ds destructeur ds liste chainee
    Par Treuze dans le forum C++
    Réponses: 2
    Dernier message: 13/04/2006, 18h34

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