begin process at 2012 05 30 16:01:05
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

System

 > 

Redéfinition des opérateurs new et delete


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Redéfinition des opérateurs new et delete

mercredi 3 février 2010 à 10:42:19 | Redéfinition des opérateurs new et delete

buno

Administrateur CodeS-SourceS
Chers amis bonjour!
J'ai un code assez conséquent qui contient potentiellement des fuites mémoire.
J'aimerais mettre en place un outil de suivi d'allocation de mémoires afin de tracer les éventuelles fuites.
Je pensais redéfinir les opérateurs new et delete afin de tracer les allocations (pointeur, taille, fichier, ligne).

Est-ce faisable rapidement? Avez-vous ce genre d'outil sous la main?

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
mercredi 3 février 2010 à 12:21:40 | Re : Redéfinition des opérateurs new et delete

CptPingu

Administrateur CodeS-SourceS
Tu vas redéfinir les opérateurs new et delete de chaque classe ? Un peu lourd non ?

Sous Unix, il y a un outil super pour ça: valgrind. Il détecte les fuites mémoires (et d'autre chose comme les débordements de bornes, les doubles désallocations, etc...), et peut même parfois détecter la ligne exact dans le code.
Il existe sûrement un équivalent Windows, non ?

_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
mercredi 3 février 2010 à 14:31:41 | Re : Redéfinition des opérateurs new et delete

buno

Administrateur CodeS-SourceS
L'idée est justement de modifier au minimum le code: c'est pour ça que je veux redéfinir les opérateurs.
Je ne connais pas valgrind mais des recherches m'ont montré que l'équivalent sous Windows était Purify. Or il est tellement gourmand en ressource que je peux pas le faire tourner correctement en même temps que mon appli...


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
mercredi 3 février 2010 à 14:39:58 | Re : Redéfinition des opérateurs new et delete

CptPingu

Administrateur CodeS-SourceS
Est-ce que ton appli est multi-plateforme ? Si c'est le cas, je peux toujours te faire tourner un coup de valgrind :)

Peux-tu essayer sinon de redéfinir les appels system aux allocations mémoires ? Par exemple le projet Duma (ex Electric Fence), par un simple binding, permet de faire cela. Il check alors certains accès mémoires invalides. Tu peux peut être réutiliser leur technique pour détecter des fuites mémoires sans intrusion dans ton code. En revanche, ce n'est pas trivial.

N'y-t-il pas autre chose que Purify ? J'ai vu du "Insure++", et du PageHeap: http://support.microsoft.com/kb/286470, ou encore du http://www.softwareverify.com/cpp/memory/index.html.
Ou peut être Visual Leak Detector, qui doit faire partit de Visual Studio.

_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
mercredi 3 février 2010 à 17:40:38 | Re : Redéfinition des opérateurs new et delete

buno

Administrateur CodeS-SourceS
J'ai trouvé une source de Vecchio56 assez intéressante et rapide à mettre en oeuvre. Il faut que je vois si ça peut s'appliquer à mon application


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
lundi 8 février 2010 à 16:03:18 | Re : Redéfinition des opérateurs new et delete

buno

Administrateur CodeS-SourceS
Re,
J'ai réussi à redéfinir mes new et delete dans une dll. Il me suffit d'inclure ma dll dans mon projet et, en sortie, j'ai un log avec les fuites détectées (fichier, ligne, taille d'alloc).
ça marche bien sur de "petits" projets". Par contre, sur des plus gros incluant d'autres ressources tierces, il peut y avoir des soucis: par exemple, Xerces redéfinit lui aussi les opérateurs new et delete. Du coup, mon projet ne compile plus (syntax error dans XMemory.hpp).

Des idées pour faciliter la cohabitation?


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
lundi 8 février 2010 à 17:07:55 | Re : Redéfinition des opérateurs new et delete

CptPingu

Administrateur CodeS-SourceS
Essaie d'utiliser un vrai outil de vérification mémoire. La redéfinition des operateurs new et delete ne garantie pas que tu trouves toutes les fuites (ils n'agissent pas sur les malloc/free, et les new/delete custom).
De plus, il faut aussi redéfinir delete[].

En outils, il y a:
http://en.wikipedia.org/wiki/Memory_debugger
http://web.archive.org/web/20071212210815/http://www.cs.utexas.edu/users/jpmartin/memCheckers.html

Essaie vraiment d'en faire fonctionner un, sinon tu vas t'arracher les cheveux :)

_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
lundi 8 février 2010 à 17:32:22 | Re : Redéfinition des opérateurs new et delete

buno

Administrateur CodeS-SourceS
Ne t'inquiètes pas, j'ai pensé aux opérateur new[] et delete[] également.
Merci de tes liens, que je gardes sous le coude car très intéressant.

Après, si je "m'acharnes" à coder un truc pareil, c'est aussi pour pouvoir le ré-utiliser

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
lundi 8 février 2010 à 17:34:43 | Re : Redéfinition des opérateurs new et delete

CptPingu

Administrateur CodeS-SourceS
Ca n'a pas l'air simple du tout !
Un gars du MIT, a rédigé un article sur l'opérateur new. Il s'est bien cassé la tête apparemment:
http://www.scs.stanford.edu/~dm/home/papers/c++-new.html

_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio


Cette discussion est classée dans : delete, opérateurs, outil, fuites, redéfinition


Répondre à ce message

Sujets en rapport avec ce message

detection des fuites mémoire [ par kimo_100 ] j'aimerai utiliser un outil pour detecter les fuites mémoiredans mon application(en c++ sous hp ux 11).j'ai essayé avec insure,mais il ne m'a pas beau wxWidgets : new et delete [ par Daimadoshi ] slt tlm, voila je programme une IHM avec wxWidgets (v 2.4.2 + Dev c++ 4.9.9.0) mais je me rend compte qu'une chose me choque dans tt les tuto et exemp faire une barre d'outil IE comme Google ? [ par supergrey ] Bonjour, Je cherche des sources ou exemple pour créer une barre d'outil pour Internet explorer.Merci! surcharge des opérateurs [ par gmisof ] comment on peut utiliser la commande operator de vc++?gmisof Code pour créer une barre d'outil dés l'exécution d'une Macro Excel (XLA) [ par superdidic ] Bojour,Quelqu'un sait il comment faire pour créer un nouveau menu dans la barre d'outil quand on execute une macro XLA.Merci Désallocation mémoire!!! [ par PunkDude424 ] Mon problème est le suivant:J'avais un semblant de screen saver en Java qui affichais des etoile a chaque temps X et d'une durée Y ....la structure de utilisation de delete [ par thiosyiasar ] Bonne fête à tous !!!!En cette fin d'année, je suis confronté à un petit pb lors que mon application se termine, j'ai une erreur en relation la mémoir hsdpa au secouuuur!!!!!! [ par mejdac ] je travaille sur un projet intégrations des régles d'ingénierie hsdpa dans un outil logiciel de planification de l'interface radio de l'umtsje doit de Vitesse de calculs [ par elflink ] Bonjour à tous,Je travaille en API, C++.Je m'exerce sur l'élaboration d'un outil de dessinage, et de la même manière que MSPAINT, mon programme dispos que fait exactement delete ?? [ par Tonus ] Salut @ tous Voila je voudrais savoir si en créant un tablo dans un fonction , l'instruction delete va -t- elle supprimer la totalité du tablo ou jus


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 7,223 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales