Nous sommes actuellement le 09 Juil 2026, 01:45

Le fuseau horaire est UTC-5 heures [Heure d’été]




Publier un nouveau sujet Répondre au sujet  [ 4 message(s) ] 
Auteur Message
MessagePublié: 07 Août 2004, 16:33 
Hors-ligne
Occasionnel
Occasionnel

Inscription : 18 Fév 2004, 14:08
Message(s) : 164
Salut!

Je suis un programmeur débutant/intermédiaire en C++. J'ai de l'expérience avec le langage Java et j'ai commencé mes premiers pas en C++ au cours des derniers mois.

J'aimerais savoir si certains d'entre-vous connaissent des guides ou autres sur le web pour surcharger les opérateurs new et delete globaux. Comme je débute, j'oublie parfois de libérer la mémoire allouée dynamiquement avec l'opérateur new. J'aimerais pouvoir surcharger l'opérateur new et delete pour créer un log de la mémoire allouée avec new et libérer avec delete. Une façon de faire serait de passer en paramètre le type de l'objet pour lequel la mémoire est allouée et faire de même avec l'opération delete. Ainsi, je pourrais vérifier que chaque appel à l'opérateur new est accompagné d'un appel à l'opérateur delete en consultant le log.

Quelqu'un à une piste à me donner pour réaliser cette tâche ou une idée meilleure que celle-là?

Merci.


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 07 Août 2004, 18:11 
Hors-ligne
Régulier
Régulier
Avatar de l’utilisateur

Inscription : 06 Jan 2002, 22:37
Message(s) : 296
j'avais deja trouvé ce code sur internet pour pouvoir reperrer les fuites de mémoire.

(j'utilisais ca avec VS6, mais si tu utilises autre chose ca te donne une bonne piste quand meme...)

Code :
// memory.h
#ifndef IMWATCHINGYOULEAK
#define IMWATCHINGYOULEAK

#ifdef _CRTDBG_MAP_ALLOC
  #undef _CRTDBG_MAP_ALLOC
#endif
#include <crtdbg.h>
#ifdef _DEBUG
#define THIS_FILE __FILE__
inline void* operator new(size_t nSize, const char * lpszFileName, int nLine)
{
    return ::operator new(nSize, _NORMAL_BLOCK, lpszFileName, nLine);
}
inline void __cdecl operator delete(void * _P, const char * lpszFileName, int nLine)
{
    ::operator delete(_P, lpszFileName, nLine);
}
#define DEBUG_NEW       new(THIS_FILE, __LINE__)
#define malloc(s)       _malloc_dbg(s, _NORMAL_BLOCK, THIS_FILE, __LINE__)
#define calloc(c, s)    _calloc_dbg(c, s, _NORMAL_BLOCK, THIS_FILE, __LINE__)
#define realloc(p, s)   _realloc_dbg(p, s, _NORMAL_BLOCK, THIS_FILE, __LINE__)
#define _expand(p, s)   _expand_dbg(p, s, _NORMAL_BLOCK, THIS_FILE, __LINE__)
#define free(p)         _free_dbg(p, _NORMAL_BLOCK)
#define _msize(p)       _msize_dbg(p, _NORMAL_BLOCK)
#endif

#endif


et tu inclus ca dans chaque fichiers que tu veux surveiller:
Code :
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


( http://www.codeproject.com/debug/consoleleak.asp )


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 07 Août 2004, 20:30 
Hors-ligne
Occasionnel
Occasionnel

Inscription : 18 Fév 2004, 14:08
Message(s) : 164
Excellent! Merci pour la piste. Ça indique effectivement les opérateurs new pour lesquelles il n'existe aucun delete.

Si on prend le cas de Qt par contre, les composantes graphiques sont détruites implicitement lorsqu'on applique l'opérateur delete sur leur parent. Donc pas besoin d'appliquer l'opérateur delete sur ces composantes, mais le code que tu m'as fourni génère quand même des warnings. Ça demeure quand même un bon outil. Merci encore!


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 13 Août 2004, 10:58 
Hors-ligne
Régulier
Régulier

Inscription : 22 Juin 2003, 00:01
Message(s) : 396
En C++ on ne peut pas surcharger l'opérateur Delete il me semble???


Haut
 Profil  
Répondre en citant  
Afficher les messages publiés depuis :  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 4 message(s) ] 

Le fuseau horaire est UTC-5 heures [Heure d’été]


Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 2 invité(s)


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum

Recherche de:
Aller vers :  
Propulsé par phpBB® Forum Software © phpBB Group
Traduction et support en françaisHébergement de site