valgrind内存泄漏错误时使用pthread_create [英] valgrind memory leak errors when using pthread_create

查看:516
本文介绍了valgrind内存泄漏错误时使用pthread_create的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用pthread库编写程序。当我使用命令valgrind --leak-check = full运行我的程序时,我得到以下错误描述:

I'm writing a program using the pthread library. When i run my program with the command valgrind --leak-check=full, i get the following errors description:

==11784==  
==11784== **HEAP SUMMARY:**  
==11784==     in use at exit: 4,952 bytes in 18 blocks  
==11784==   total heap usage: 1,059 allocs, 1,041 frees, 51,864 bytes allocated  
==11784==  
==11784== **288 bytes** in 1 blocks are possibly lost in loss record 2 of 3  
==11784==    at 0x4C2380C: calloc (vg_replace_malloc.c:467)  
==11784==    by 0x4010D2E: _dl_allocate_tls (dl-tls.c:300)  
==11784==    by 0x55DC218: **pthread_create**@@GLIBC_2.2.5 (allocatestack.c:570)  
==11784==    by 0x401BC0: initdevice(char*) (in /a/fr-01/vol/home/stud/lim/workspace  /Ex3/l)  
==11784==    by 0x406D05: main (in /a/fr-01/vol/home/stud/lim/workspace/Ex3/l)  
==11784==  
==11784== **4,608 bytes** in 16 blocks are possibly lost in loss record 3 of 3  
==11784==    at 0x4C2380C: calloc (vg_replace_malloc.c:467)  
==11784==    by 0x4010D2E: _dl_allocate_tls (dl-tls.c:300)  
==11784==    by 0x55DC218: **pthread_create**@@GLIBC_2.2.5 (allocatestack.c:570)    
==11784==    by 0x40268F: write2device(char*, int) (in /a/fr-01/vol/home/stud/lim/workspace/Ex3/l)  
==11784==    by 0x406D7B: main (in /a/fr-01/vol/home/stud/lim/workspace/Ex3/l)  
==11784==  
==11784== **LEAK SUMMARY:**  
==11784==    definitely lost: 0 bytes in 0 blocks  
==11784==    indirectly lost: 0 bytes in 0 blocks  
==11784==      possibly lost: 4,896 bytes in 17 blocks  
==11784==    still reachable: 56 bytes in 1 blocks  
==11784==         suppressed: 0 bytes in 0 blocks  
==11784== Reachable blocks (those to which a pointer was found) are not shown.  
==11784== To see them, rerun with: --leak-check=full --show-reachable=yes  
==11784==  
==11784== For counts of detected and suppressed errors, rerun with: -v  
==11784== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 4 from 4)  






每次调用pthread_create时,使用某个函数 - 在函数结束时调用函数pthread_exit。因此,在验证这不是问题后,可能是什么问题?


Every time i call pthread_create, with a certain function - i call the function pthread_exit in the end of the function. So, after verifying this is not the problem, what could be the problem?

推荐答案

线程的资源不会在终止时立即释放,除非
线程是使用分离状态属性设置为
PTHREAD_CREATE_DETACHED 创建的如果为
及其 pthread_t 调用 pthread_detach

A thread's resources are not immediately released at termination, unless the thread was created with the detach state attribute set to PTHREAD_CREATE_DETACHED, or if pthread_detach is called for its pthread_t.

未被删除的线程将保持终止状态,直到其标识符传递给 pthread_join pthread_detach

An undetached thread will remain terminated state until its identifier is passed to pthread_join or pthread_detach.

总而言之,您有三个选项:

To sum it up, you have three options:


  1. (PTHREAD_CREATE_DETACHED属性)

  2. 在创建后分离您的主题(通过调用 pthread_detach )或

  3. 加入被终止的线程以回收它们(通过调用 pthread_join )。

  1. create your thread with detached attribute set(PTHREAD_CREATE_DETACHED attribute)
  2. Detach your thread after creation (by calling pthread_detach), or
  3. Join with the terminated threads to recycle them (by calling pthread_join).

Hth。

这篇关于valgrind内存泄漏错误时使用pthread_create的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆