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

Langage C++ Discussion :

fuite memoire introuvable


Sujet :

Langage C++

  1. #1
    Membre régulier Avatar de fifafou
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2016
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Janvier 2016
    Messages : 173
    Points : 92
    Points
    92
    Par défaut fuite memoire introuvable
    je crée un clone de minecraft, mais j'ai une fuite de mémoire
    les chunks sont alloué dans une thread pool dynamiquement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void ChunkThreadPool::loop(int id)
    {
        while(running)
        {
            sf::sleep(sf::milliseconds(50));
            if(threads[id].state==1)
            {
                threads[id].output = new Chunk(threads[id].input);
                threads[id].state=2;
            }
        }
    }
    puis le pointeur est mis dans une unordered map
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void World::loadGenerated()
    {
        for(unsigned int i=0;i<generated.size();i++)
        {
            ivec3 pos=generated[i]->Getpos();
            generated[i]->buildMesh();
            chunkMap[pos]=generated[i];
            clipChunkMesh(pos);
            generated[i]->GetMesh()->setBuffers();
        }
        generated.clear();
    }
    puis libéré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void World::unloadChunks(vec3 pos)
    {
        ivec3 key;
        for(std::pair<ivec3,Chunk*> element : chunkMap)
        {
            key=element.first;
            if(key.x-(pos.x/32)>3 || key.x-(pos.x/32)<-3 || key.y-(pos.y/32)>3 || key.y-(pos.y/32)<-3 || key.z-(pos.z/32)>3 || key.z-(pos.z/32)<-3)
            {
                delete element.second;
                chunkMap.erase(key);
            }
        }
    }
    mais j'ai une fuite de mémoire, ca prend de plus en plus mémoire quand je génère des chunks
    Quelqu'un aurai une idée?
    quel serai le meilleurs moyen de debugger ca?(Windows CodeBlocks)

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    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 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Le meilleur moyen de s'en débarrasser, et d'améliorer la qualité de son code, c'est d'utiliser std::unique_ptr.
    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.

  3. #3
    Membre régulier Avatar de fifafou
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2016
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Janvier 2016
    Messages : 173
    Points : 92
    Points
    92
    Par défaut
    je vais essayer unique ptr

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Hello,

    mais j'ai une fuite de mémoire, ca prend de plus en plus mémoire quand je génère des chunks
    Comment sais-tu qu'il y a une fuite mémoire ?

    Une bonne façon de traquer ce genre de problème est d'utiliser des outils comme valgrind ou dr memory.

    Bon courage !

  5. #5
    Membre régulier Avatar de fifafou
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2016
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Janvier 2016
    Messages : 173
    Points : 92
    Points
    92
    Par défaut
    j'ai essayé unique ptr mais je crois que j'ai toujours la fuite de memoire,la memoire utilisé monte quand je genere des chunks et d'autres bug en plus,je vais essayer de fixer ca
    valgrind est seulement dispo sur linux,j'ai essayé dr memory mais il ne pouvais pas se lancer
    ce qu'il me faudrait c'est qqchose pour mesurer assez precisement la ram alloué mais j'ai pas vraiment trouvé

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    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 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Faut dire que je vois pas le rapport entre une collection threads sur laquelle tu alloues le membres output et une collection generated que tu parses.
    unique_ptr va éviter les fuites mémoires, si elles sont dûes à des pointeurs dont tu perds le contrôle.
    Sinon pour tracker les allocations, il faut surcharger l'allocateur, et logger les allocations.
    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.

  7. #7
    Membre régulier Avatar de fifafou
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2016
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Janvier 2016
    Messages : 173
    Points : 92
    Points
    92
    Par défaut
    finalement c'etait les buffers opengl que je réallouait pas correctement et un buffer que je supprimait pas

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 31/10/2008, 08h31
  2. fuite memoire avec sfml
    Par themulot dans le forum SFML
    Réponses: 2
    Dernier message: 27/11/2007, 10h25
  3. [2.0] Comment tracer les fuites mémoire ?
    Par StormimOn dans le forum C++/CLI
    Réponses: 9
    Dernier message: 02/11/2007, 07h22
  4. [java] fuite memoire quand 2 process!
    Par vince3320 dans le forum Langage
    Réponses: 6
    Dernier message: 01/03/2007, 16h50
  5. [VC++6] probleme fuite memoire CLIST ?
    Par athilla dans le forum MFC
    Réponses: 16
    Dernier message: 22/11/2005, 16h01

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