Bonjour a tous,
Je travaille actuellement sur un petit programme alliant threads et fonctions de formatage (en gros, vsprintf_s() ) et je rencontre un souci de fuite memoire.
En gros, mon main() cree une thread qui va faire une operation quelconque, puis consigner le resultat dans un fichier de log. Helas, cette fonction qui ecrit les logs fait un appel a vsprintf_s, et j'ai pu remarquer qu'a chaque appel de la fonction, le programme faisait un memory leak. En commentant cette fonction, plus rien.
Donc, que s'est-il passe ?
Voici le code en question, juste celui de la thread:
Et voila, donc si on vire le bloc du vsprintf_s, aucune fuite !
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
18
19
20
21
22
23
24
25
26
27
28 void glb_log(unsigned int const level, char const * const function, char const * data, ...) { char buffer[512]; char const *debugginglevels[] = { "ALL", "DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL", "NONE" }; va_list ap; DWORD n; if (logLevel == DEBUG_NONE) return; if ((level != DEBUG_ALL) && (level < logLevel)) return; va_start(ap, data); if ((n = vsprintf_s(buffer, 512, data, ap)) > 1) { WriteFile(logFile, buffer, n, &written, NULL); FlushFileBuffers(logFile); } if (level == DEBUG_CRITICAL) { CloseHandle(logFile); } va_end(ap); }
Si quelqu'un a une idee...
Merci d'avance![]()
Partager