您的位置:首页 > 其它

pthread_create()使用detach分离后仍有内存泄漏

2017-12-11 17:25 375 查看
valgrind 工具安装使用

使用valgrind 工具检查内存泄漏
gcc -g -o out test.c -lpthread
valgrind --tool=memcheck --leak-check=full --show-reachable=yes ./out

使用了两种方案分离方案,仍存在内存泄漏情况,于是把两个分离方案测试例子列出来,希望对大家有帮助。如果有好的解决方案,请留言,多谢
pthread_join(threadid,NULL);

[b]pthread_detach(pthread_self());
[/b]
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);

--------------------------------------------------------------------------------------------------
1 无泄漏
#include<stdio.h>
#include<pthread.h>
void* test(){
sleep(2);
printf("ok\n");
}
int main(int argc, char** argv){

pthread_t threadid;

pthread_create(&threadid, NULL, test, NULL);

pthread_join(threadid,NULL);

return 1;
}
--------------------------------------------------------------------------------------------------
2 泄漏
void* test(){
printf("ok\n");
}
int main(int argc, char** argv){

pthread_t threadid;

pthread_attr_t attr;

pthread_attr_init(&attr);

pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);

pthread_create(&threadid, &attr, test, NULL); 泄漏

pthread_attr_destroy(&attr);

return 1;
}
--------------------------------------------------------------------------------------------------
3 无泄漏
void* test(){
printf("ok\n");
}
int main(int argc, char** argv){

pthread_t threadid;

pthread_attr_t attr;

pthread_attr_init(&attr);

pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);

pthread_create(&threadid, &attr, test, NULL); 无泄漏

sleep(1); //线程运行完成。

pthread_attr_destroy(&attr);

return 1;
}
--------------------------------------------------------------------------------------------------
4 泄漏
void* test(){
sleep(2);
printf("ok\n");
}
int main(int argc, char** argv){

pthread_t threadid;

pthread_attr_t attr;

pthread_attr_init(&attr);

pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);

pthread_create(&threadid, &attr, test, NULL); 无泄漏

sleep(1);

pthread_attr_destroy(&attr);

return 1;
}
--------------------------------------------------------------------------------------------------
5 泄漏
void* test(){
pthread_detach(pthread_self());
printf("ok\n");
}
int main(int argc, char** argv){
pthread_t threadid;
pthread_attr_t attr;
pthread_create(&threadid, NULL, test, NULL);
return 1;
}
--------------------------------------------------------------------------------------------------
6 无泄漏
void* test(){
pthread_detach(pthread_self());
printf("ok\n");
}
int main(int argc, char** argv){
pthread_t threadid;
pthread_attr_t attr;
pthread_create(&threadid, NULL, test, NULL);无泄漏
sleep(1);
return 1;
}
--------------------------------------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: