Fuite mémoire - Comment faire ?

cs_jipp Messages postés 20 Date d'inscription mardi 19 avril 2005 Statut Membre Dernière intervention 12 août 2005 - 11 août 2005 à 11:02
cs_jipp Messages postés 20 Date d'inscription mardi 19 avril 2005 Statut Membre Dernière intervention 12 août 2005 - 12 août 2005 à 07:54
Bonjour,

J'ai actuelle des problèmes de fuites mémoires sur mon application VC++6 et je ne sais pas trop comment faire pour trouver les erreurs.

En fait parfois le debuger donne des informations sur les données causant le problème mais parfois il ne donne que les adresses mémoires. Mon problème est donc de trouver quelles sont les données qui sont mappées à ces adresses.
Existe-il un/des outils permettant de régler ce PB.

Les messages que j'ai dans le debug sont du type :

Detected memory leaks!
Dumping objects ->
{67} normal block at 0x00811690, 284 bytes long.
Data: <2 ,O M xs > 32 FD 06 2C 4F 81 13 AF 4D 85 F3 A6 83 78 73 BC
{66} normal block at 0x008117E0, 72 bytes long.
Data: < @ h > 80 40 0A 68 00 00 00 00 FF 00 00 00 1C 01 00 00
{52} normal block at 0x008119F0, 33 bytes long.
Data: < C > 00 43 00 CD CD CD CD CD CD CD CD CD CD CD CD CD
{51} normal block at 0x00811A40, 40 bytes long.
Data: < |L > 14 7C 4C 10 16 00 00 00 00 00 00 00 00 00 00 00
Object dump complete.

Merci pour votre aide

19 réponses

BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
11 août 2005 à 11:26
Une façon de trouver tes fuites mémoires: tu trace tes new/delete.
A chaque fois que t'en fais un, tu écris l'adresse de ton pointeur (soit dans un fichier, soit dans une sortie stdout ou stderr)

SUREVEILLER LES ALLOCATIONS DE MEMOIRE [C]:
http://www.cppfrance.com/code.aspx?ID=32481

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
cs_jipp Messages postés 20 Date d'inscription mardi 19 avril 2005 Statut Membre Dernière intervention 12 août 2005
11 août 2005 à 12:36
Quand j'insère ce code C dans mon projet C++ ... ça ne compile pas

mwatch.c(101) : fatal error C1010: unexpected end of file while looking for precompiled header directive
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
11 août 2005 à 14:11
cela doit être une histoire de #include "stdafx.h". rajoute-le dans mwatch.c...ou supprime le dans les autres fichiers du projet

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
cs_jipp Messages postés 20 Date d'inscription mardi 19 avril 2005 Statut Membre Dernière intervention 12 août 2005
11 août 2005 à 14:43
Toujours pareil ... avec l'include ... mais je me demande si ce code fonctionne dans un projet VC++ ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
11 août 2005 à 14:51
pourquoi pas?
Tu as une option pour les entêtes précompilées:
ProjectSettings>C/C++>Category=Precompiled Headers
Tu dois pourvoir cocher "Not using precompiled headers"

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
cs_jipp Messages postés 20 Date d'inscription mardi 19 avril 2005 Statut Membre Dernière intervention 12 août 2005
11 août 2005 à 15:02
En effet je peux cocher ça ... mais si je le fais et que je commente tous les #include "stdafx.h" je me retrouve avec plus de 1500 erreurs dans mon appli C++
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
11 août 2005 à 15:11
Dis donc, t'as pas de bol... :)
Bon, on va faire autrement:
- tu rajoute l'include dans les nouveaux fichiers
- tu retourne dans ProjectSettings>... et tu coche "Create..."
- tu compile
Pour les prochaines compil, tu pourras cocher "Automatic Use..."

Si cela ne marche pas....bah, inspire toi du code et crée toi-même tes fichiers
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
cs_jipp Messages postés 20 Date d'inscription mardi 19 avril 2005 Statut Membre Dernière intervention 12 août 2005
11 août 2005 à 15:18
Je met quoi comme nom de fichier dans le create ?
le même nom ==> stdafx.h
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
11 août 2005 à 15:22
yes! Rien aussi ça marche je crois

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
11 août 2005 à 15:23
Visiblement la fuite ne vient pas de toi, car quand c'est une partie de ton code, le nom du fichier ainsi que la ligne sont affichées
0
cs_jipp Messages postés 20 Date d'inscription mardi 19 avril 2005 Statut Membre Dernière intervention 12 août 2005
11 août 2005 à 15:25
La compilation n'est pas possible (qu'il me dit le bordel) car 2 de mes fichiers du projet sont (soit disant) configurés pour produire NomAppli.pch
0
cs_jipp Messages postés 20 Date d'inscription mardi 19 avril 2005 Statut Membre Dernière intervention 12 août 2005
11 août 2005 à 15:27
Tu vois vecchio56 je n'osais pas croire ça ... mais j'y pensais assez fort.

J'ai effectivement provoqué une fuite mémoire volontaire dans mon code et en effet le debugger me donne le nom du module et même la ligne de plantage.

Mais d'ou vient le fuite alors ?
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
11 août 2005 à 15:29
vecchio56> t'es sûr de ton coup?
jipp> bon bah...en avant les mimines et hop! plein de fprintf pour écrire les adresses de tes pointeurs après les new et avant les delete...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
cs_jipp Messages postés 20 Date d'inscription mardi 19 avril 2005 Statut Membre Dernière intervention 12 août 2005
11 août 2005 à 15:35
Le PB Bruno c'est que j'ai très peu de new/delete dans mon appli ...alors j'ai des doute là dessus.

Par contre y'a un truc bizarre dans mon code ... généré en automatique (voir la ligne pink , je ne trouve pas le delete associé à ce new, est-ce normale ? ):

BOOL CRaccTramApp::InitInstance()
{
AfxEnableControlContainer();





// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.





#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif





// Change the registry key under which our settings are stored.
// TODO: You should modify this string to be something appropriate
// such as the name of your company or organization.
SetRegistryKey(_T("Local AppWizard-Generated Applications"));





LoadStdProfileSettings(); // Load standard INI file options (including MRU)





// Register the application's document templates. Document templates
// serve as the connection between documents, frame windows and views.





CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CRaccTramDoc),
RUNTIME_CLASS(CMainFrame), // main SDI frame window
RUNTIME_CLASS(CRaccTramView));
AddDocTemplate(pDocTemplate);
.... }
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
11 août 2005 à 16:12
oui si AddDocTemplate stoque la valeur du pointeur. La fuite peu tres bien venir "indirectement" de toi ?
0
cs_jipp Messages postés 20 Date d'inscription mardi 19 avril 2005 Statut Membre Dernière intervention 12 août 2005
11 août 2005 à 16:17
C'est à dire steve_clamage ?
Que dois-je faire ?
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
11 août 2005 à 17:12
Je ne connais pas VC++, il ne fournit pas d'outils pour detecter les fuites ?
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
11 août 2005 à 19:08
Si, le texte qu'il a collé au debut, tu l'obtiens à la fin de l'execution
0
cs_jipp Messages postés 20 Date d'inscription mardi 19 avril 2005 Statut Membre Dernière intervention 12 août 2005
12 août 2005 à 07:54
Donc ça semble pas évident ... de trouver l'erreur ... d'autant plus que si ça vient d'une Lib ou de MFC ... ????
0
Rejoignez-nous