поиск утечек памяти в коде c в среде linux - PullRequest
1 голос
/ 28 августа 2010

Привет, у меня возникла проблема с использованием valgrind, когда я использую его с valgrind --leak-check=full, и после этого имя файла excution сообщает мне, в каких блоках происходит утечка памяти, но когда я не могу найти, какой указатель я использовал free.есть ли какой-нибудь флаг, который сообщает имя указателя.если есть хоть какой-то способ сказать мне, где утечка на визуальной студии, я бы очень хотел услышать об этом тоже

Ответы [ 2 ]

1 голос
/ 29 августа 2010

Он не может сказать вам имя указателя, потому что вся идея утечки памяти состоит в том, что указатель no больше не указывает на память (по крайней мере, для тех утечек, которые Valgrindописывает как «определенно потерян» ).

Что он может сказать вам, это исходный файл и номер строки, где была выделена память - тогда вам нужно будет посмотретьвверх по этой строке в вашем источнике, чтобы выяснить, где память предполагается для освобождения.Например, если запись о потере 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()), и только вы можете сказать, где она должна была быть освобождена.

1 голос
/ 28 августа 2010

Вы не сказали, какой компилятор вы используете, я полагаю, gcc?Используете ли вы -g, чтобы включить символы отладки?

...