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 :

Memory Leaks in MemoryManager Yes engine


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 18
    Points : 10
    Points
    10
    Par défaut Memory Leaks in MemoryManager Yes engine
    Bonjour a tous !!!!, J'ai un petit soucis de memory leaks. J'ai repris le memory manager du yes engine et la classe memoryManager genere des leaks.

    Au momment de la destruction de MemoryManager il doit détruire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    std::map<void*, Block>  // stock les pointeur d'objet alloué
    std::ofstream               // le fichier de sorti
    std::stack<Block>         // stock tout les appel a delete
    le probleme et que la std pour détruire les objets (map, ofstream, stack) appartenant a memorymanager, appelle les surdefinition de new et delete
    ce qui entraine un appelle a la fonction free de MemoryManager alors que l'on est dans le destructeur de memorymanager.

    j'ai creer un projet avec un main basique avec le memorymanager et les surdefinition de new et delete du yes engine. il y a juste le main qui est de moi.

    main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    #include <crtdbg.h>
    #include "DebugNew.h"
     
    void main()
    {	
    	int*p =new int;
    	delete p;
    	_CrtDumpMemoryLeaks();
    }
    les memory leaks
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    Detected memory leaks!
    Dumping objects ->
    {162} normal block at 0x00327BE0, 40 bytes long.
     Data: <         |2     > CC CC CC CC CD CD CD CD 00 7C 32 00 CD CD CD CD 
    {161} normal block at 0x00327B80, 32 bytes long.
     Data: < {2             > E0 7B 32 00 00 00 00 00 00 00 00 00 00 00 00 00 
    {136} normal block at 0x003266F8, 60 bytes long.
     Data: < f2  f2  f2     > F8 66 32 00 F8 66 32 00 F8 66 32 00 CD CD CD CD 
    Object dump complete.
    Merci

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Voici le projet presque vide avec le memory Manager du yes engine de loulou.


    http://www5.spread-it.com/dl.php?id=...51c45ff4160dd1

    Dite moi si vous voyez une erreur de ma part merci.

  3. #3
    Membre actif
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Points : 284
    Points
    284
    Par défaut
    Citation Envoyé par couet
    le probleme et que la std pour détruire les objets (map, ofstream, stack) appartenant a memorymanager, appelle les surdefinition de new et delete ce qui entraine un appelle a la fonction free de MemoryManager alors que l'on est dans le destructeur de memorymanager.
    Non il ne doit pas appeler les redéfinitions de new et delete. Sauf si tu as inclu "DebugNew.h" avant les header de la STL. Mais Laurent précise bien que "DebugNew.h" doit être inclu en dernier.
    En particulier, si tu es sous Visual Studio, cela interdit d'inclure "DebugNew.h" via "stdafx.h" puisqu'il est inclu avant les autres.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 943
    Points : 1 156
    Points
    1 156
    Par défaut
    Je ne me suis pas encore penché sur ton code mais as-tu pensé à désactiver les redéfinition lorsqu'il le faut.

    Je ne me souviens plus comment laurent a fait mais ce doit être un truc du style:

    #define MEMORY_MANAGER_ENABLE // active le gestionnaire
    ...
    #define MEMORY_MANAGER_DISABLE // desactive le gestionnaire

    à moins qu'il n'utilise des include différents, dans ce cas il faudrait faire des
    #include à la place des #define.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Dans ce code j'ai juste fait un dans le main.cpp
    les autres fichier etant exactement les memes que dans le moteur de laurent.

    En fait la solution serait que quelqun qui a et qui arrive a compiler le yes engine

    ajoute dans le main.cpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #include <crtdbg.h>
     
    _CrtDumpMemoryLeaks(); // juste avant le fin du programme
    Ainsi on verrait peut etre si il y a les memes leaks que dans mon programme

    Merci

  6. #6
    Membre actif
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Points : 284
    Points
    284
    Par défaut
    Si tu espionnes un memorytracker avec un autre memorytracker, pas étonant que tu ne t'en sorte pas...
    Ton appel à _CrtDumpMemoryLeaks() est fait *avant* la destruction du CMemoryManager. Tu devrais avoir la même chose sans les p =new int/delete p.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    oki, donc en fait pas de memory leaks, bon ces une bonne nouvelle

    Merci pour tous !!!

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

Discussions similaires

  1. Compilation TAO / Mfc : Memory Leaks
    Par Rolsct dans le forum CORBA
    Réponses: 4
    Dernier message: 17/04/2005, 20h13
  2. [MFC] Thread & memory leaks
    Par Racailloux dans le forum MFC
    Réponses: 7
    Dernier message: 15/03/2005, 13h44
  3. Memory leak en C/C++
    Par Roswell dans le forum Autres éditeurs
    Réponses: 6
    Dernier message: 07/07/2004, 20h41
  4. [MFC] A la chasse au memory leak
    Par Yabo dans le forum MFC
    Réponses: 17
    Dernier message: 27/06/2004, 18h35
  5. Réponses: 7
    Dernier message: 26/02/2004, 10h32

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