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 :

Liste chainé et fuite mémoire


Sujet :

C++

  1. #1
    Membre habitué Avatar de poussinphp
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 428
    Points : 176
    Points
    176
    Par défaut Liste chainé et fuite mémoire
    Bonjour,

    J'ai crée une class qui fais un liste doublement chainé. Cette classe est en faite un monstre pour un jeu. J'ai une boucle principal de jeu qui affiche les monstres. Mais j'ai une fuite mémoire (quand je fais ctrl+alt+suppr je remarque que l'espace mémoire grandi au fur et à mesure.

    J'ai essayé pas mal de méthode mais sans résultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void Cmonstre::afficher(SDL_Surface *surface)
    {
    	Cmonstre *monstre = new Cmonstre(this->fichier,this->tileH,this->tileL,this->positionX,this->positionY);
    	*monstre = *this->suivant;
    	this->image->afficher(surface,this->numeroImage,this->positionX, this->positionY);
    	while(monstre->suivant != NULL)
    	{
    		monstre->image->afficher(surface,monstre->numeroImage,monstre->positionX, monstre->positionY);
    		*monstre = *monstre->suivant;
    	}
    	delete monstre;
    }
    Je comprend pas d'ou peut venir le problème, je détruit bien l'objet à la fin et je fais pas de copie...

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par poussinphp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	*monstre = *this->suivant;
    je fais pas de copie...
    Là tu ne fais pas une affectation de pointeurs, mais une affectation d'objets. Si tu veux être certain de ne pas faire de copie, déclare privés, sans les définir, les constructeurs de copie et opérateurs d'affectation de ta classe.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    A chaque fois que tu dois afficher un monstre (donc des dizaines de fois par seconde) tu en alloue un nouveau dynamiquement, tu y recopies ton monstre original, et pour finir ton monstre affiche les autres monstres qui lui sont reliés

    Parfois on se demande comment les gens en arrivent à des trucs aussi tordus

    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
    class Cmonstre
    {
    public :
     
        void Afficher()
        {
            image->afficher(surface, numeroImage, positionX, positionY);
        }
    };
     
    std::list<Cmonstre> Monstres;
    for (std::list<Cmonstre>::iterator It = Monstres.begin(); It != Monstres.end(); ++It)
    {
        It->Afficher();
    }

Discussions similaires

  1. Liste chainée en mémoire partagée
    Par drogeek dans le forum C
    Réponses: 2
    Dernier message: 21/05/2013, 07h13
  2. Fuite mémoire liste doublement chaînée
    Par Melanie_Flower dans le forum Débuter
    Réponses: 4
    Dernier message: 14/03/2012, 16h07
  3. Listes Chainées et libération mémoire?
    Par alexglvr dans le forum Débuter
    Réponses: 16
    Dernier message: 19/01/2011, 12h14
  4. mémoire et liste chainée?
    Par tintin72 dans le forum C++
    Réponses: 17
    Dernier message: 17/12/2005, 20h54
  5. Réponses: 24
    Dernier message: 30/10/2005, 09h27

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