pthread와 valgrind에서의 memory leak
글쓴이: peccavi / 작성시간: 화, 2006/10/31 - 10:47오전
안녕하세요.
다음 코드를 valgrind로 돌려보면 memory leak이 발생합니다.
어디가 문제인건가요?
#include <stdio.h> #include <pthread.h> void *thread_routine(void *arg) { return arg; } int main() { int ret; void *result; pthread_t ThreadID; ret = pthread_create(&ThreadID, NULL, thread_routine, NULL); if( ret != 0 ) { printf("create thread fail\n"); return 0; } ret = pthread_join(ThreadID, &result); if( ret != 0 ) { printf("pthread_join error\n"); return 0; } return 0; }
valgrind 결과
==7480== Memcheck, a memory error detector. ==7480== Copyright (C) 2002-2005, and GNU GPL'd, by Julian Seward et al. ==7480== Using LibVEX rev 1471, a library for dynamic binary translation. ==7480== Copyright (C) 2004-2005, and GNU GPL'd, by OpenWorks LLP. ==7480== Using valgrind-3.1.0-Debian, a dynamic binary instrumentation framework. ==7480== Copyright (C) 2000-2005, and GNU GPL'd, by Julian Seward et al. ==7480== For more details, rerun with: -v ==7480== ==7480== ==7480== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 13 from 1) ==7480== malloc/free: in use at exit: 68 bytes in 1 blocks. ==7480== malloc/free: 1 allocs, 0 frees, 68 bytes allocated. ==7480== For counts of detected errors, rerun with: -v ==7480== searching for pointers to 1 not-freed blocks. ==7480== checked 8,480,624 bytes. ==7480== ==7480== LEAK SUMMARY: ==7480== definitely lost: 0 bytes in 0 blocks. ==7480== possibly lost: 68 bytes in 1 blocks. ==7480== still reachable: 0 bytes in 0 blocks. ==7480== suppressed: 0 bytes in 0 blocks. ==7480== Reachable blocks (those to which a pointer was found) are not shown. ==7480== To see them, rerun with: --show-reachable=yes
gcc 버전은 4.0.3 입니다.
뭐가 문제인지, 이게 실제로 문제가 되는건지 당췌 모르겠습니다. -_-;;
답변좀 부탁드리겠습니다~
감기조심하세요~~
Forums:
특별히 문제가 있어
특별히 문제가 있어 보이지는 않습니다. 가끔 여러 라이브러리를 쓴 경우, 라이브러리에서 내부적으로 쓰고 있는 resource가 있거나, 라이브러리에 버그?가 있어서 leak로 보고되는 것이 있긴 하지만, 이 프로그램에서 발생한 것이 아니기 때문에 크게 걱정할 필요는 없을 것 같습니다.
또, valgrind로 test할 프로그램에 debugging 정보를 주고 (컴파일 옵션 -g), valgrind를 실행할 때, 다음과 같이 실행하면 자세한 정보를 얻을 수 있습니다:
--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
세부 옵션으로
세부 옵션으로 확인해본 결과 pthread_create 내부에서 문제가 있어 보이는데, 맞는건지요..
glibc나 커널의 다른 버전에서는 테스트해 보지는 않았지만
일단은 그냥 무시하고 지나가야 될듯 싶습니다.
답변 정말 감사드립니다.
----
jai guru deva om...
----
jai guru deva om...
pthread_detach 함수를
pthread_detach 함수를 불러보세요.
댓글 달기