2011-03-17 76 views
1

我创建了20个线程来读取/写入共享文件。我已同步线程。 现在我的程序工作正常,但是当我运行它的valgrind它给我的错误是这样的: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,它给出了同样的错误。

我什至没有malloced,但仍valgrind抱怨。

任何建议,将不胜感激。

回答

2

您可以运行valgrind --leak-check = full ./prog_name以确保这些可到达的块不是您可以在程序中销毁的东西。多次初始化libcurl之类的库而不关闭或销毁它将导致泄漏。如果它不是你可以控制的东西,你可以写一个抑制文件。 http://valgrind.org/docs/manual/mc-manual.html第4.4节有一些信息和一些例子的链接

1

Sill可到达块可能是由于标准库没有释放标准容器池中使用的内存引起的(see this faq):这可能是程序退出时的性能优化,因为内存会立即返回到操作系统无论如何。

“可能丢失”块可能是由同一件事引起的。

Valgrind Manual page for memcheck对检测到的不同种类的泄漏有很好的解释。

+0

那么我们如何才能摆脱这些错误,或者我应该妥协与他们.............. – Muse 2011-03-17 11:36:10

+0

如果他们在你的标准库,那么你不能。您可以使用'--leak-check = full'来显示可以检查的块的详细信息。您可以使用抑制文件(http://valgrind.org/docs/manual/manual-core.html#manual-core.suppress)来隐藏您不关心的错误的详细信息。 – James 2011-03-17 15:14:28