如何修复Valgrind日志中的内存泄漏

时间:2012-10-17 10:49:13

标签: c memory-leaks valgrind patch

这是我第一次看到valgrind日志,这个日志是由其他用户提供的(我不能运行valgrind,因为它不支持stlinux(sh4)

学习如何使用valgrind日志修复内存泄漏,如果有任何专家,请高度赞赏,甚至选择一行波纹管的valgrind错误日志(并告诉我们,他打算修复的valgrind错误行并发布他们的修复程序(补丁程序)源代码)

然后,将学习如何修复valgrind日志中的内存泄漏,我会自行修复(我只需要一个示例修复)

这是app trac浏览器(源代码): http://www.streamboard.tv/oscam/browser/trunk/?rev=5375

非常感谢任何专家看看这些日志(我真的需要帮助),这里有4个valgrind日志:

http://www.4shared.com/office/04seUumN/valgrind_2.html

http://www.4shared.com/office/WYmfxICb/valgrindlog.html

http://www.4shared.com/office/WGwlKeUK/valgrind.html

http://www.4shared.com/office/mkX4FAzd/valgrind_1.html

P.S:

  1. 因为我不能自己运行valgrind,请选择内存泄漏最大的内存丢失(泄漏),然后,我可以用我的眼睛监视这些改进(top command,ps -aux)

  2. 我对修复内存泄漏的担心主要局限于这些模块(对我来说,优先级(重要性)是在它们的数字序列中(我的意思是,用module-datastruct-list.c修复内存泄漏是在我的首要任务,....)

    • 模块datastruct-list.c
    • oscam-garbage.c
    • oscam.c
    • 模块cccam.c
    • 模块dvbapi.c
  3. 提前致谢

1 个答案:

答案 0 :(得分:2)

很久以前我使用过Valgrind所以我不记得如何使用它,但我知道这很容易。 Valgrind日志显示程序的每个内存泄漏,由于您的代码,但也由于您从库调用的代码。对于每个泄漏,都会显示函数调用堆栈,如下所示:

==5313== Invalid write of size 4
==5313==    at 0x8048A27: test_2() (valgrind-tests.cc:37)
==5313==    by 0x8048CDF: main (valgrind-tests.cc:134)
==5313==    by 0x215BBE: __libc_start_main (in /lib/libc-2.3.2.so)
==5313==    by 0x8048910: (within /home/newren/examples/valgrind-tests)
==5313==    Address 0x1B3E024 is 0 bytes inside a block of size 4 free'd
==5313==    at 0x5419C5: __builtin_delete (vg_replace_malloc.c:244)
==5313==    by 0x5419E3: operator delete(void*) (vg_replace_malloc.c:253)
==5313==    by 0x8048A20: test_2() (valgrind-tests.cc:36)
==5313==    by 0x8048CDF: main (valgrind-tests.cc:134)
==5313==    by 0x215BBE: __libc_start_main (in /lib/libc-2.3.2.so)
==5313==    by 0x8048910: (within /home/newren/examples/valgrind-tests)

这意味着您尝试在内存中写入4个字节,但您无法访问这些字节。 此问题位于此示例中“valgrind-tests.cc”的第37行。

valgrind的主要问题是,正如我之前所说,它会显示您使用的库中的内存泄漏或内存警告(如遗忘指针)。 要清理日志,可以编写名为“suppression files”的valgrind规则文件。

更多信息herehere