在工作中,我正在用 C 语言编写一个相当复杂的软件,并且我经常使用 valgrind 对其进行测试。到目前为止,该程序运行良好,没有内存泄漏或数组边界违规,并且在 valgrind 报告中,“frees”的数量与“mallocs”的数量相匹配 - 很棒。让我烦恼的是它报告了数千个 free 和 malloc。而且我知道一个事实我做的不超过50-60。我确实知道,当我的程序调用“fopen”时,valgrind 会将调用计入 malloc 的数量,同样,“fclose”也会计入“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)