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

来源:互联网 发布:zealer fix淘宝店 编辑:程序博客网 时间:2024/06/06 19:03
valgrind 工具安装使用
使用valgrind 工具检查内存泄漏
gcc -g -o out test.c -lpthread
valgrind --tool=memcheck --leak-check=full --show-reachable=yes ./out

使用了两种方案分离方案,仍存在内存泄漏情况,于是把两个分离方案测试例子列出来,希望对大家有帮助。如果有好的解决方案,请留言,多谢
pthread_join(threadid,NULL);
pthread_detach(pthread_self());
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;
}
--------------------------------------------------------------------------------------------------
阅读全文
0 0