#include #include #include "../memcheck.h" struct foo { struct foo *l, *r; }; struct foo *mk(struct foo *l, struct foo *r) { struct foo *f = malloc(sizeof(*f)); f->l = l; f->r = r; return f; } int main() { struct foo *volatile a, *volatile b, *volatile c; b = mk(mk(0, 0), 0); /* Partially leaked tree structure */ a = mk(mk(mk(mk(mk(0, 0), 0), mk(mk(0, 0), b)), mk(0, 0)), mk(0,0)); a = NULL; VALGRIND_DO_LEAK_CHECK; b = NULL; /* now leak old b */ /* Completely leaked, but part of the structure is shared */ b = mk(0,0); b->l = b; b->r = b; a = mk(b,b); c = mk(b,b); a = b = c = 0; VALGRIND_DO_LEAK_CHECK; return 0; }