На работе я пишу довольно сложную часть программного обеспечения на C, и я часто тестирую ее с помощью valgrind. Программа до сих пор отлично работает без утечек памяти или нарушений границ массива, а в отчете valgrind количество «frees» соответствует количеству «mallocs» - отлично. Меня беспокоит то, что он сообщает о тысячах frees и mallocs. И я знаю, что я не делаю больше, чем около 50-60. Я знаю, что когда моя программа вызывает «fopen», этот вызов подсчитывается valgrind по отношению к числу mallocs, и аналогично «fclose» подсчитывается по отношению к числу «frees». Но в моем случае это все еще не объясняет числа, которые я вижу, сколько раз память и освобождение памяти. Я тщательно изучил свой код, тщательно искал виновника, но ничего не получил. Я не могу публиковать какой-либо код по понятным причинам, но я просто хочу знать, я что-то упустил? Существуют ли другие операции C, которые valgrind подсчитывает по отношению к числу mallocs и frees?Что все операции C делают valgrind как «malloc» и «free»?
Вот мой отчет о valgrind. Как вы можете видеть, все выглядит хорошо с этой точки зрения.
Memcheck, a memory error detector
Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al.
Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
Command: ./Codec
Parent PID: 3526
HEAP SUMMARY:
in use at exit: 0 bytes in 0 blocks
total heap usage: 2,407 allocs, 2,407 frees, 28,877,748 bytes allocated
All heap blocks were freed -- no leaks are possible
For counts of detected and suppressed errors, rerun with: -v
ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 6 from 6)
Как насчет 'for (int i = 0; i! = 10000; ++ i) {free (malloc (1)); } '? –
Если вы вызываете подпрограммы библиотеки C или связываетесь с любыми библиотеками и вызываете их, они могут вызывать malloc() и free(). –
Вы используете библиотеки? Часто они выделяют и освобождают память за кулисами. – Pankrates