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 :

Libération de mémoire non réservée (operator=)


Sujet :

C++

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Libération de mémoire non réservée (operator=)
    Bonjour,

    J'ai des soucis de libération de mémoire dans une de mes classes. C'est une liste circulaire avec sentinelle. La classe représentant les chaînons a été implémentée par un prof.

    Voici quelques données concernant la classe :
    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
    /**
    * Type des noeuds
    */
    typedef DataStructure::CyclicNode<double> noeudReel;
     
    /**
    * Taille
    */
    unsigned int _size;
     
    /**
    * Pointeur sur la sentinelle
    */
    noeudReel* sentinelle;
     
    /**
    * Constructeur d'une liste vide
    */
    liste::liste() : _size(0)
    {
    sentinelle = new liste::noeudReel();
    }
     
    /**
    * Constructeur par recopie
    */
    liste::liste(const liste& l) : _size(0)
    {
    sentinelle = new liste::noeudReel();
    add(*this, l);
    }
     
    /**
    * Destructeur
    */
    liste::~liste()
    {
    while(!empty())
    {
    _size--;
    delete sentinelle->previous();
    }
    delete sentinelle;
    }
     
    /**
    * Opérateur d'affectation
    * @param l1 Référence vers la liste à affecter
    * @return Référence vers la liste affectée
    */
    liste& liste::operator=(const liste& l)
    {
    if(this != &l)
    {
    while(!empty())
    {
    _size--;
    delete sentinelle->previous();
    }
    add(*this, l);
    }
    return *this;
    }
     
    /**
    * Ajout des valeurs d'une liste à la fin d'une autre
    * @param l1 Liste à modifier
    * @param l2 Liste à recopier
    */
    void add(liste& l1, const liste& l2)
    {
    liste::iterator::iterator fin = l2.end();
    liste::iterator::iterator i = l2.begin();
    while(i != fin)
    {
    sentinelle->insertBefore(new liste::noeudReel(*i));
    _size++;
    ++i;
    }
    }
    EDIT : Problème de l'autoaffectation résolu en retournant une référence (operateur =)...

    EDIT : Problème du constructeur par recopie résolu en mettant la taille de départ à 0

    Dernière modification par Invité ; 27/05/2006 à 13h31.

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

Discussions similaires

  1. [C#, .net 2.0] Libération de mémoire non managée
    Par SesechXP dans le forum C++/CLI
    Réponses: 2
    Dernier message: 08/12/2006, 09h00
  2. Problème libération de mémoire?
    Par Bartuk dans le forum C
    Réponses: 7
    Dernier message: 28/12/2005, 17h20
  3. Libération de mémoire
    Par petitcoucou31 dans le forum Langage
    Réponses: 1
    Dernier message: 16/09/2005, 14h10
  4. [Debutant(e)]problème de libération de mémoire
    Par skywalker3 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 10/02/2005, 17h38
  5. Réponses: 25
    Dernier message: 16/07/2003, 20h41

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