리눅스 프로그램에서의 메모리 누수 체크를 위한 방법에 대해 알아보자.

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char *str = (char*) malloc(1024);
    printf("flsdkjfslkjfsdklfj\n\n\n");
    printf("\n\n");
    return 0;
}

컴파일( -g 옵션을 넣어야 파일과 라인을 알수 있다. 그리고 -o옵션보다 먼저 써줘야 한다.)
gcc -g -o test test.c

valgrind --tool=memcheck --leak-check=yes --show-reachable=yes ./test

하면

==17708==
==17708== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 11 from 1)
==17708== malloc/free: in use at exit: 1,024 bytes in 1 blocks.
==17708== malloc/free: 1 allocs, 0 frees, 1,024 bytes allocated.
==17708== For counts of detected errors, rerun with: -v
==17708== searching for pointers to 1 not-freed blocks.
==17708== checked 59,020 bytes.
==17708==
==17708== 1,024 bytes in 1 blocks are definitely lost in loss record 1 of 1
==17708==    at 0x4021620: malloc (vg_replace_malloc.c:149)
==17708==    by 0x80483D0: main (test.c:6)
==17708==
==17708== LEAK SUMMARY:
==17708==    definitely lost: 1,024 bytes in 1 blocks.
==17708==      possibly lost: 0 bytes in 0 blocks.
==17708==    still reachable: 0 bytes in 0 blocks.
==17708==         suppressed: 0 bytes in 0 blocks.


출력내용중 빨간색부분이 Memory 누수가 발생한 부분이다.
소스파일 test.c의 여섯번째 라인에서 메모리 누수가 발생하였다는 것이고, 하나의 블록에서 총 1,024byte의 누수가 발생하였음을 알 수 있다.

출력내용을 파일에 저장하고자 할 경우에는 "--log-file"옵션을 사용한다.

valgrind --tool=memcheck --leak-check=yes --show-reachable=yes --log-file="./valgrind_log" ./test

Home-Page : http://valgrind.org/ 
Manual : http://valgrind.org/docs/manual/manual.html 
Download : http://valgrind.org/docs/download_docs.html


1. Valgrind 설치

wget http://www.valgrind.org/downloads/valgrind-3.3.0.tar.bz2
tar xvfj valgrind-3.3.0.tar.bz2
cd valgrind-3.3.0
./configure
make
make install

2. Valgrind 테스트
valgrind --leak-check=yes main

3. 간단 실행법
valgrind --tool=memcheck --leak-check=full [프로그램] [실행인자들...]

2008/09/10 11:25 2008/09/10 11:25
포스팅이 유익 하셨다면 RSS 구독을 신청하세요

Trackback Address >> http://dolba.net/tt/k2club/trackback/1994

  1. 명이 2008/09/10 12:06  address  modify / delete  reply

    @_@

    오늘은 인사차 들렸어요~ 아침에 열심히 포스팅하는것보다 소소한 인사도 괜찮겠다는 생각에^^
    역시..프로그램에 관련된 내용은 봐도봐도 그저 보기만...ㅎㅎ

    날씨가 무척 덥죠? 이런 날씨라고 방심하시면 안되요~
    일교차 클때가 추울때보다 감기에 더 잘걸린답니다. 건강 조심, 또 조심하세요~
    즐거운 하루 되시고요^*^

  2. 구차니 2008/11/18 10:41  address  modify / delete  reply

    It runs on the following platforms: X86/Linux, AMD64/Linux, PPC32/Linux, PPC64/Linux.
    ㅠ.ㅠ 다른 플랫폼에도 적용이 가능하면 좋겠어요