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;
}
--------------------------------------------------------------------------------------------------
使用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;
}
--------------------------------------------------------------------------------------------------
相关文章推荐
- 正确使用pthread_create,防止内存泄漏
- 正确使用pthread_create,防止内存泄漏
- 解决使用pthread_create函数造成的内存泄露
- pthread_create后没有detach导致内存持续增长
- 解决了一个隐蔽的内存泄漏——pthread_create后没有detach导致内存持续增长
- pthread_create创建线程后必须使用join或detach释放线程资源[内存泄漏]
- 避免使用不当pthread_create函数造成内存泄露
- 解决了一个隐蔽的内存泄漏——pthread_create后没有detach导致内存持续增长
- 线程分离pthread_detach、pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
- pthread_create和pthread_detach, pthread_cancel的使用
- pthread_create创建线程后必须使用join或detach释放线程资源[内存泄漏]
- pthread_create后没有detach导致内存持续增长
- 解决了一个隐蔽的内存泄漏——pthread_create后没有detach导致内存持续增长
- 解决使用pthread_create函数造成的内存泄露
- 解决使用pthread_create函数造成的内存泄露
- 一个隐蔽的内存泄漏——pthread_create后没有detach导致内存持续增长
- VC++ 6.0 中如何使用 CRT 调试功能来检测内存泄漏
- 解决undefined reference to `pthread_atfork'/`pthread_detach'/`pthread_create'/`pthread_join'
- 使用Eclipse_Memory_Analyzer进行内存泄漏分析三部曲
- 内存泄漏分析之-内存分析工具的使用