vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 2010
-
8 août 2005 à 17:22
steve_clamage
Messages postés475Date d'inscriptiondimanche 3 octobre 2004StatutMembreDernière intervention11 août 2006
-
8 août 2005 à 21:03
Bonjour,
J'ai un pb de fuite avec std::list, sous VC++ 7.1
J'ai ce problème seulement quand mon objet est global, ou bien local dans main
Voila un code qui perd 12 octets par exemple:
#include
#include <list>
#include <crtdbg.h>
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
using namespace std;
int main()
{
list l;
_CrtDumpMemoryLeaks();
}
Voila, comme je suis un gros maniaque, j'aimerais bien que cela disparaisse
Si quelqu'un voit le problème...
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 8 août 2005 à 17:35
La STL est fiable... ca dépend si elle est bien implémentée ou pas a mon avis. Ou je pourrais mettre l'appel _CrtDumpMemoryLeaks() selon toi, si ce n'est la? Je peux rien mettre après le main...
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 8 août 2005 à 17:48
Non ca vient bien du conteneur, mais comme la désallocation se fait après...
J'utilise un pointeur global et j'alloue dans le main, m'en fout si c'est pas beau, ya que moi qui voit
xterminhate
Messages postés371Date d'inscriptiondimanche 4 janvier 2004StatutMembreDernière intervention23 septembre 2009 8 août 2005 à 17:51
Il existe peut être une solution plus élégante et fiable. Le risque est d'utiliser ton pointeur dans une classe statique ou globale...(avant l'allocation dans le main)
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 8 août 2005 à 20:46
Parce que je veux pas en voir avec mon _CrtDumpMemoryLeaks, ca me permettra de voir facilement si j'ai des fuites ou pas, au lieu de me dire "cette fuite la n'en n'est pas une, celle la oui..."
steve_clamage
Messages postés475Date d'inscriptiondimanche 3 octobre 2004StatutMembreDernière intervention11 août 20065 8 août 2005 à 21:03
Tu dois absolument éviter la solution avec pointeur, meme si tu
controle la durée de vie de ton objet (mais tu vois dans ce cas meme ca
c'est inutile) tu dois l'eviter car a grande echelle c'est
inmaintenable.
Une solution serait de mettre "_CrtDumpMemoryLeaks();" dans le
destructeur d'une variable static. Ca fonctionnera si tu n'as pas ce
probleme avec d'autre variables static ou l'ordre de destruction n'est
plus previsible.
#include
#include <list>
#include <crtdbg.h>
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
using namespace std;
namespace
{
class Foo
{
class Bar
{
~Bar() {
_CrtDumpMemoryLeaks();
}
}; // class Bar
static Bar bar; // on aurait pu mettre en globale mais c'est plus propre comme ca