Valgrind жалуется при работе с потоками - PullRequest
1 голос
/ 17 марта 2011

Я создал 20 потоков для чтения / записи общего файла. Я синхронизировал потоки.Теперь моя программа работает нормально, но когда я запускаю ее с valgrind, она выдаёт мне ошибки, подобные этой:

LEAK SUMMARY:

   **definitely lost: 0 bytes in 0 blocks.
\
     **possibly lost: 624 bytes in 5 blocks.**

   **still reachable: 1,424 bytes in 5 blocks.****


    suppressed: 0 bytes in 0 blocks.

Reachable blocks (those to which a pointer was found) are not shown.

Также, когда я нажимаю Ctrl + c, она выдает те же ошибки.

Я даже ничего не испортил, но Вальгринд все еще жалуется.

Любое предложение будет оценено.

Ответы [ 2 ]

2 голосов
/ 17 марта 2011

Вы можете запустить valgrind --leak-check = full ./prog_name, чтобы убедиться, что эти достижимые блоки нельзя уничтожить в вашей программе.Часто инициализация библиотеки, такой как libcurl, без ее закрытия или уничтожения, приведет к утечкам.Если это не то, что вы контролируете, вы можете написать файл подавления.http://valgrind.org/docs/manual/mc-manual.html раздел 4.4 содержит некоторую информацию и ссылку на некоторые примеры

1 голос
/ 17 марта 2011

Блоки достижимого порога, вероятно, вызваны тем, что ваша стандартная библиотека не освобождает память, используемую в пулах для стандартных контейнеров ( см. Этот faq ): что было бы оптимизацией производительности при выходе из программы, так как память немедленно уходитв любом случае, чтобы быть возвращенным в операционную систему.

«Возможно, утерянные» блоки, вероятно, вызваны одной и той же причиной.

На странице руководства Valgrind для memcheck есть хорошее объяснениео различного рода обнаруженных утечках.

...