Savoir si l'on fait des fuites mémoires[vc++]

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 696 fois - Téléchargée 36 fois

Contenu du snippet

Les fuites mémoires sont redoutées par tous les développeurs
Voici un truc pour que Visual C++ nous les révèle
... même en projet console

Source / Exemple :


//voici une fonction qui fait des fuites à chaque invocation :
void f(){ int * p = new int[1000];}

en effet, le pointeur qui pourrait servir à faire le delete[] est systématiquement perdu .
A chaque invocation de la méthode, on perd donc 1000*sizeof(int) = 4000 octets du tas.
Si cette fonction est souvent employée, le tas va finir par se tarir et le système par crasher

Dans le cas suivant par exemple 
int main()
{
 for (int i=0; i<1000 ; ++i) f();
}

La question est comment être averti par le compilateur ?
Il existe un truc simple sous Visual C++
ajouter le ligne suivante en tête de ficher:
<#include afx.h>
puis passer en mode utilisation des MFC
menu Projet/Settings/onglet general / use MFC
c'est tout ! ne changez pas plus votre code
Lorsque vous lancerez le débogueur avec F5 (et non pas (CTRL+F5)
vous verrez vos fuites (s'il y en a) dans la fenêtre debug

corriger alors la (les) fuite(s) : dans notre cas :
void f(){ int * p = new int[1000]; delete[]p; }
y a pu de fuite !

Conclusion :


ajout d'une copie d'écran

A voir également

Ajouter un commentaire

Commentaires

RV2931
Messages postés
185
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
16 juillet 2016

Effectivement, ça me paraît pas mal

mais comment fait-on pour s'en servir parce que moi, ça :

Detected memory leaks!
Dumping objects ->
{704} normal block at 0x099E6738, 48 bytes long.
Data: <xe e xe > 78 65 9E 09 E8 65 9E 09 78 65 9E 09 CD CD CD CD
{703} normal block at 0x099E66C8, 48 bytes long.
Data: <xe Xf xe > 78 65 9E 09 58 66 9E 09 78 65 9E 09 CD CD CD CD
{702} normal block at 0x099E6658, 48 bytes long.
Data: < e xe f > E8 65 9E 09 78 65 9E 09 C8 66 9E 09 CD CD CD CD
{701} normal block at 0x099E65E8, 48 bytes long.

Je comprends pas vraiment...

Comment retrouver là où il y a fuite mémoire SVP ???

Merci
collinsdc
Messages postés
4
Date d'inscription
vendredi 7 février 2003
Statut
Membre
Dernière intervention
13 février 2004

vas-y vieuxlyon , t'as raison
RaphAstronome
Messages postés
105
Date d'inscription
samedi 7 décembre 2002
Statut
Membre
Dernière intervention
17 août 2009

Pas que sur Windows NT, tous les OS libérent la mémoire allouée par un programme quand ce programme se termine.
Pas vraimant sour Win 98 (et sans doute d'autre) il faut un programme special pour le faire.
cs_vieuxLion
Messages postés
455
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
6 avril 2004
7
OUAIS...
surtout si l'on développe un logiciel serveur dont le process ne s'arrête jamais...
cs_Kaid
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

Pas que sur Windows NT, tous les OS libérent la mémoire allouée par un programme quand ce programme se termine.
Mais il est bien plus "propre" de libérer les ressources allouées par un programme(mémoire, fichier, ...) que de laisser le système le faire.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.