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

SL & STL C++ Discussion :

Erreur à la destruction d'un objet list


Sujet :

SL & STL C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 9
    Par défaut Erreur à la destruction d'un objet list
    Salut,

    J'ai dans une classe les lignes suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class MyClass{
    ...
       std::list<String> tags;
    };
    Lors de la destruction d'une instance de MyClass j'ai une erreur dans le nettoyage du heap (visual C++ 7.1 en debug) sans avoir jamais touché à cette liste. La vérification automatique lors du nettoyage du heap me dit qu'un pointeur est incorrect. Dois-je explicitement détruire cet object (tags) dans le destructeur de MyClass? Et si oui comment (delete tags; ???).

    Merci.
    Yves

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Salut.
    qu'es ce que String ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 9
    Par défaut
    J'utilise une librairie speciale qui s'appelle juce. C'est une classe de string (chaine de caractere).

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 9
    Par défaut
    J'ai essaye en remplacant String par int et j'ai le meme probleme.

  5. #5
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par yves2 Voir le message
    J'ai essaye en remplacant String par int et j'ai le meme probleme.
    c'est donc ailleur.
    Utilise tu des pointeur? et tu sur de la manière dont tu les utilisent? vérifie les accès memoire.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 9
    Par défaut
    Je n'utilise pas tags, je me contente de le creer en faisant une instance de MyClass. Par contre le fait de l'inclure dans la definition de MyClass cree le probleme. Mais je ne sais pas exactement ce qui se passe lorsque l'on instancie une list. Y a t'il quelque chose de creer qu'il faut detruire ou nettoye dans le destructeur de MyClass?

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par yves2 Voir le message
    Y a t'il quelque chose de creer qu'il faut detruire ou nettoye dans le destructeur de MyClass?
    non.
    Ca doit être une erreur mémoire
    Vérifie l'utilisation tes pointeurs dans ton code.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 9
    Par défaut
    La seule chose que je fasse est d'ajouter des objets graphiques de la librairie juce dans le créateur. Tous ces objets sont censés être correctement détruit par la fonction juce deleteAllChildren(). Il doit y avoir un problème dans la librairie. Ce qui est curieux c'est que le fait d'ajouter une liste dans la définition de la classe fasse ressortir le problème.

  9. #9
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par yves2 Voir le message
    Il doit y avoir un problème dans la librairie
    Ca j'y croit pas trop...

    Citation Envoyé par yves2 Voir le message
    Ce qui est curieux c'est que le fait d'ajouter une liste dans la définition de la classe fasse ressortir le problème.
    Ben c'est le principe d'une erreur mémoire, ça fait n'importe quoi. Parfois ça tombe même en marche (comme quand tu enleve std::list<String> tags
    . Et le problème est que cela peut être n'importe où dans ton code.

    Peut tu mettre le code de ta class?? histoire de voir si déjà si l'erreur n'est pas là

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 9
    Par défaut
    Je n'ai pas reussi a mettre le fichier en piece jointe; seul le constructeur est appelé:

    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
     
    #include "juce.h"
     
    class CTab3: public Component,
                 public ButtonListener
    {
    public:
     
    	CTab3();
    	~CTab3();
    private:
        TextButton* LoadButton;		// bouton
    	Label *LPath;
    	TextEditor* TextPath;
    	TextEditor* TextError;		// liste des erreurs
     
    	std::list<String> tags;		// liste des tag en attente de fermeture /tag
    };
     
     
    CTab3::CTab3()
    {
    	int X00, X0, DX, Y0, DY;
     
    	// bouton
    	addAndMakeVisible (LoadButton = new TextButton (T("LOAD")));
        LoadButton->setBounds (24, 16, 40, 20);
        LoadButton->addButtonListener (this);
    	LoadButton->setTooltip("charge data");
     
    	// path
    	X00 = X0 = 5;
    	Y0 = 40;
    	DX = 40;
    	DY = 20;
        addAndMakeVisible (LPath = new Label (T("bof"), T("Path")));
        LPath->setFont (Font (15.0000f, Font::plain));
        LPath->setJustificationType (Justification::centredLeft);
        LPath->setEditable (false, false, false);
        LPath->setColour (TextEditor::textColourId, Colours::black);
        LPath->setColour (TextEditor::backgroundColourId, Colour (0x0));
        LPath->setBounds (X0, Y0, DX, DY);
    	X0 += DX; 
    	// TextPath
    	DX = 100;
        TextPath = new TextEditor();
        addAndMakeVisible (TextPath);
        TextPath->setBounds (X0, Y0, DX, DY);
        TextPath->setText (T("..\\..\\out\\"));
    	Y0 += DY;
     
    	// TextError
    	X0 = X00;
    	DX = 350;
    	DY = 80;
        TextError = new TextEditor();
        addAndMakeVisible (TextError);
        TextError->setBounds (X0, Y0, DX, DY);
        TextError->setText (T(""));
    	TextError->setMultiLine(true);
    	Y0 += DY;
    };
    Fichiers attachés Fichiers attachés

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 9
    Par défaut
    Et voici le destructeur que j'avais oublié; apparement le fichier joint a fonctionné dans le post précédent:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CTab3::~CTab3()
    {
    	deleteAllChildren();
    };

  12. #12
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Y as rien de choquant...
    Ca ne me semble pas être ici.
    Regarde dans le reste du code. Surtout la manipulation des pointeurs.

    Sinon tu devrais essayer cette class seul pour voir si tu as le même problème.

  13. #13
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Vérifie que ton programme fait pas n'importe quoi avec valgrind sous linux. (bien sûr, pour ça il faut que ton code puisse tourner sous linux)

Discussions similaires

  1. Réponses: 6
    Dernier message: 14/02/2009, 10h13
  2. [DOM XML] Erreur fonction load() d'un objet dom??
    Par ribrok dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 04/10/2005, 11h43
  3. message d'erreur lors du choix ds 1 liste
    Par zorba49 dans le forum ASP
    Réponses: 1
    Dernier message: 08/09/2005, 21h32
  4. Réponses: 1
    Dernier message: 09/07/2005, 18h16
  5. Réponses: 14
    Dernier message: 02/03/2005, 18h15

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