Он не может сказать вам имя указателя, потому что вся идея утечки памяти заключается в том, что ни один указатель больше не указывает на память ( по крайней мере, для тех утечек, которые Валгринд описывает как «определенно потерянные» ).
Что он может сообщить вам, так это исходный файл и номер строки, в которой была выделена память. Затем вам нужно будет найти эту строку в исходном коде, чтобы выяснить, где память предполагается для освобождения. Например, если запись о потерях Valgrind выглядит так:
==17110== 49 bytes in 1 blocks are definitely lost in loss record 17 of 35
==17110== at 0x4023D6E: malloc (vg_replace_malloc.c:207)
==17110== by 0x80C4CF8: do_foo (foo.c:1161)
==17110== by 0x80AE325: xyzzy (bar.c:466)
==17110== by 0x8097C46: io (bar.c:950)
==17110== by 0x8098163: main (quux.c:1291)
Тогда вам нужно посмотреть строку 1161 в foo.c
, которая находится внутри функции do_foo()
. Вот где была выделена память (с помощью malloc()
), и только вы можете сказать, где она должна была быть освобождена.
Вы не сказали, какой компилятор вы используете, я полагаю, gcc?
Используете ли вы -g
для включения символов отладки?