Как проверить, что все выделения памяти были освобождены между двумя контрольными точками? - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть процесс, который, кажется, утечка памяти. Чем дольше выполняется процесс, тем больше памяти он использует. Это несмотря на то, что процесс состоит в основном из цикла, который итеративно вызывает функцию, которая не должна сохранять никаких данных между вызовами. Когда я использую valgrind для проверки на утечки, все возвращается в порядке. Когда процесс в конечном итоге завершается после нескольких часов работы, при выходе происходит существенная задержка, и все это заставляет меня поверить, что память выделяется в этой функции и не освобождается немедленно, поскольку на нее все еще ссылаются. Затем память освобождается при выходе, потому что эта ссылка в конце концов освобождается.

Мне интересно, есть ли способ с использованием valgrind (или другого совместимого с linux инструмента) проверить утечку между двумя контрольными точками кода. Я хотел бы получить отчет об утечке всей памяти, которая была выделена, но не освобождена между двумя контрольными точками кода.

1 Ответ

0 голосов
/ 05 сентября 2018

Я написал статью об этом несколько лет назад.

Короче говоря, вы включаете valgrind.h, а затем можете использовать макросы, такие как

VALGRIND_DO_LEAK_CHECK

В качестве альтернативы вы можете присоединить gdb и выполнить команду 'monitor leak_check'. Это может быть добавочным. Смотри здесь

...