western AJMM | Salut,
mon code est simple mais valgrind trouve des fuites de mémoires dans le library libmysqlclient.so.10.0.0. Est-ce que j'ai oublié quelque chose?
Mon code:
Code :
- char * requete = "SELECT * FROM "NOM_TABLE_1;
- MYSQL * mysql = mysql_init((MYSQL *)NULL);
- MYSQL_RES * mysql_resultat;
- MYSQL_ROW mysql_ligne;
- if(mysql == NULL)
- {
- return(-1);
- }
- if (!mysql_real_connect(mysql, ADRESSE_BDD, LOGIN_BDD, PASSWORD_BDD, NOM_BDD, 0, NULL, 0))
- {
- fprintf(stderr, "Impossible de se connecter au serveur %s\n Error=%s\n", ADRESSE_BDD, mysql_error(mysql));
- mysql_close(mysql);
- return(-1);
- }
- if(mysql_query(mysql, requete) != 0)
- {
- fprintf(stderr, "Impossible d'executer la requête %s\nError=%s\n", requete, mysql_error(mysql));
- }
- else
- {
- mysql_resultat = mysql_store_result(mysql);
- if(mysql_resultat != NULL)
- {
- for(i = 0; i < mysql_resultat->row_count; i++)
- {
- mysql_ligne = mysql_fetch_row(mysql_resultat);
- // le reste de traitement
- }
- }
- free(mysql_resultat);
- }
- mysql_close(mysql);
|
Sortie de Valgrind:
==2636== 40 bytes in 1 blocks are definitely lost in loss record 1 of 4
==2636== at 0x4015E310: malloc (vg_clientfuncs.c:103)
==2636== by 0x40254A2D: my_malloc (in /usr/lib/mysql/libmysqlclient.so.10.0.0)
==2636== by 0x402500EF: read_rows (in /usr/lib/mysql/libmysqlclient.so.10.0.0)
==2636== by 0x40251EF6: mysql_store_result (in /usr/lib/mysql/libmysqlclient.so.10.0.0)
==2636==
==2636== 4088 bytes in 1 blocks are still reachable in loss record 2 of 4
==2636== at 0x4015E310: malloc (vg_clientfuncs.c:103)
==2636== by 0x4025A64C: my_once_alloc (in /usr/lib/mysql/libmysqlclient.so.10.0.0)
==2636== by 0x4025ACB0: read_charset_index (in /usr/lib/mysql/libmysqlclient.so.10.0.0)
==2636== by 0x4025AEAB: init_available_charsets (in /usr/lib/mysql/libmysqlclient.so.10.0.0)
==2636==
==2636== 8164 bytes in 1 blocks are possibly lost in loss record 3 of 4
==2636== at 0x4015E310: malloc (vg_clientfuncs.c:103)
==2636== by 0x40254A2D: my_malloc (in /usr/lib/mysql/libmysqlclient.so.10.0.0)
==2636== by 0x40257DF1: alloc_root (in /usr/lib/mysql/libmysqlclient.so.10.0.0)
==2636== by 0x4024FF86: unpack_fields (in /usr/lib/mysql/libmysqlclient.so.10.0.0)
==2636==
==2636== 8228 bytes in 2 blocks are still reachable in loss record 4 of 4
==2636== at 0x4015E310: malloc (vg_clientfuncs.c:103)
==2636== by 0x40254A2D: my_malloc (in /usr/lib/mysql/libmysqlclient.so.10.0.0)
==2636== by 0x4025A218: init_dynamic_array (in /usr/lib/mysql/libmysqlclient.so.10.0.0)
==2636== by 0x4025AE96: init_available_charsets (in /usr/lib/mysql/libmysqlclient.so.10.0.0) |
|