Bonsoir,

1] Dans un fichier test, j'ai crée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <glib-object.h>
#include "dvz-object.h"
 
int
main(int argc, char *argv[])
{
    DvzObject *object = dvz_object_new();
    DvzObject *obj = g_new(DvzObject, 1);
    g_object_unref(object);
    g_free(obj);
 
    return 0;
}
Quand je lance Valgrind le programme s'éxecute normalement et aucune fuite de mémoire n'est détécté.


2] si je comment la liberation de la mémoire, Valgrind ne détecte une fuite de mémoire que pour obj = g_new(DvzObject, 1);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <glib-object.h>
#include "dvz-object.h"
 
int
main(int argc, char *argv[])
{
    DvzObject *object = dvz_object_new();
    DvzObject *obj = g_new(DvzObject, 1);
    //g_object_unref(object);
    //g_free(obj);
 
    return 0;
}
Savez-vous comment détécter que g_object_unref(object); n'as pas été appelé (et donc qu'il y a une fuite de mémoire) ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
64 bytes in 1 blocks are definitely lost in loss record 140 of 252
  dans main in /home/persistant/local/src/dvz/main.c:8
  1: malloc in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so
  2: g_malloc in /lib/x86_64-linux-gnu/libglib-2.0.so.0.4800.1
  3: main in /home/persistant/local/src/dvz/main.c:8