Bonjour,
Je suis confronté à un petit prolème : j'ai créé une Dll standard en C qui est utilisée par une interface développée avec les MFC.
L'ensemble fonctionne correctement mais j'ai des fuites mémoires que j'ai réussie à identifier.
Dans le point d'entrée de la Dll, j'ai déclaré deux fonctions, lors du chargement et lors du déchargement de la Dll:
Lors du chargement j'alloue notamment 3 variables :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: _MPP_init(); break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; case DLL_PROCESS_DETACH: _MPP_close(); break; } return TRUE; }
et lors du déchargement, je les libère:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 static void _MPP_init(void) { ... m_pIPSocket = (s_IPSocket*) malloc(sizeof(s_IPSocket)); m_pIPParam = (s_IPParamThread*) malloc(sizeof(s_IPParamThread)); m_pIPParam->socket = m_pIPSocket; m_dataRecu = (char*) malloc(sizeof(char)*32); ... };
Lors de la fermeture de l'interface, et donc lors du déchargement de la Dll, il passe bien dans la fonction _MPP_Close(). En regardant la zone mémoire concernée, les variables semblent bien désallouées mais lors de l'arrêt du programme Visual Studio détecte des fuites mémoires sur ces 3 variables.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 static void _MPP_close(void) { ... free(m_dataRecu); free(m_pIPSocket); free(m_pIPParam); }
Auriez vous des idées?
Partager