fork(1) download
  1. #include <assert.h>
  2. #include <pthread.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5.  
  6. void *test(void *p)
  7. {
  8. assert(pthread_detach(pthread_self())==0);
  9. free(p); // 再thread裡面free會漸漸使記憶體用量變大
  10. pthread_exit(NULL);
  11. }
  12.  
  13. int main(int argc, char *argv[])
  14. {
  15. pthread_t tid;
  16. void *p;
  17.  
  18. for(int i=0;i<50;i++)
  19. {
  20. p = malloc(8*1024*1024);
  21. assert(p!=NULL);
  22. printf("Pointer p = %p\n", p); // print出來的記憶體位置有重複,應該是free成功
  23. assert(pthread_create(&tid, NULL, test, p)==0);
  24. // assert(pthread_join(tid, NULL)==0); // 等thread結束後再free就不會吃記憶體
  25. // me_free(p);
  26. sleep(0);
  27. }
  28.  
  29. printf("Finish.\n");
  30. return 0;
  31. }
  32.  
Success #stdin #stdout 0s 4176KB
stdin
Standard input is empty
stdout
Pointer p = 0x2b825d0b2010
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Pointer p = 0x55e267a7c140
Finish.