为什么Linux中thread_detach()导致内存泄漏

问题遇到的现象和发生背景

在Ubuntu系统中的vim下使用thread_detach()函数时,发现这个函数在处理含有lseep()的线程时会造成内存泄漏


```c

  1 #include "stdio.h"
  2 #include "pthread.h"
  3 #include 
  4 #include 
  5 
  6 //如果不
  7 
  8 
  9 
 10 void* funct(void* a){
 11 //回调函数
 12 //sleep(1);
 13 //      sleep(5);
 14 //      sleep(10);
 15         sleep(50);
 16         printf("end");
 17         pthread_exit(0);//线程的显示退出        
 18 }
 19 
 20 int main()
 21 {
 22         pthread_t tid[10];
 23         int ret,i;
 24         for(i=0;i<10;i++)
 25         {
 26                 sleep(1);
 27                 ret=pthread_create(&tid[i],NULL,funct,NULL);
 28                 if(ret<0)
 29                 {
 30                         printf("create thread failed\n");
 31                         return -1;
 32                 }
 33                   printf("begin thread:%d\n",i);
 34                 pthread_detach(tid[i]);
 35         }
 36         printf("thread_join process\n");
 37         while(1)
 38         {
 39                 printf("1\n");
 40         }
 41 }



具体现象就是当线程执行sleep(50)时,使用pthread_detach回收内存的话最终虚拟内存为428756;
不使用,不回收内存的话最终线程关闭后虚拟内存为150252。
请问这时什么原因呢?

需要有pthread_join函数,有这个函数返回时,你起的线程才会释放资源,参考下面文章
https://blog.csdn.net/wushuomin/article/details/80051295