Valgrind는 메모리 누수를 탐지하는 리눅스용 디버깅 툴입니다. Mac에서도 사용이 가능하나 현재 Mac OS X 10.12까지만 지원하고 있습니다.
사용될 코드)
다음과 같은 코드를 실행하면, 메모리가 1바이트씩 100번 할당되고, 모두가 free되지 않은 채 프로그램이 종료됩니다.
이를 Valgrind를 통해 검사해보면,
다음과 같은 결과를 볼 수 있습니다.
이 때 —leak-check=full 옵션을 사용해서 다시 돌려보면,
프로그램의 어떤 함수서 leak가 발생하고 있는지 확인 할 수 있고,
gcc로 컴파일할 때 -g 옵션을 주게 되면, 위와 같이 어떤 파일의 몇번 째 줄에서 발생했는지 볼 수 있습니다.
예시로 만든 코드가 단순해 큰 의미가 없어 보이지만, 프로그램이 커지고 할당을 잡아주는 부분이 많아지다 보면 이런 기능이 정말 유용하게 쓰입니다.
코드를 수정해 할당된 메모리를 모두 해제해 주게 되면,
no leaks are possible이라는 메세지를 볼 수 있습니다.