有关内存泄漏的帮助

时间:2010-11-18 10:17:50

标签: linux


我的应用程序在第一次超时发生时导致内存泄漏10mb。我正在使用linux计时器功能(timer_create等) 对于随后的超时,没有问题。我怀疑linux计时器有些问题 我用valgrind调试它并净化。即便是这些工具也无济于事。在这两个工具中,泄漏的内存显示为少量kb。但是我的应用程序在第一次超时时导致内存泄漏10mb 如果有人提前遇到这个问题,请帮助我。

1 个答案:

答案 0 :(得分:2)

要找出代码的哪些位导致泄漏(如果有的话),编译代码以包含调试符号(例如,如果您使用-g,则包括gcc标志),然后运行您的计划是通过valgrind

valgrind --leak-check=full ./your_program

运行将比平时花费更长的时间,但是当你的程序结束时,valgrind的输出应该告诉你你已经泄漏了多少内存以及cuplrits在哪里。

示例输出:

==10934== HEAP SUMMARY:
==10934==     in use at exit: 10 bytes in 10 blocks
==10934==   total heap usage: 10 allocs, 0 frees, 10 bytes allocated
==10934== 
==10934== 10 bytes in 10 blocks are definitely lost in loss record 1 of 1
==10934==    at 0x4024F20: malloc (vg_replace_malloc.c:236)
==10934==    by 0x8048402: main (a.c:8)
==10934== 
==10934== LEAK SUMMARY:
==10934==    definitely lost: 10 bytes in 10 blocks
==10934==    indirectly lost: 0 bytes in 0 blocks
==10934==      possibly lost: 0 bytes in 0 blocks
==10934==    still reachable: 0 bytes in 0 blocks
==10934==         suppressed: 0 bytes in 0 blocks

更新

由于您已经在使用valgrind,也许您可​​以尝试使用它附带的Massif工具。它应该能够绘制更准确的内存使用情况(与简单地观看顶部相比)。

查看this tutorial以了解如何使用它。根据程序的运行时和内存使用情况,您可能需要一些其他选项来获得合理的图形。本教程后面几页将介绍一些有用的选项。

祝你好运。