Valgrind는 메모리 누수를 탐지하는 리눅스용 디버깅 툴입니다. Mac에서도 사용이 가능하나 현재 Mac OS X 10.12까지만 지원하고 있습니다.

1) 메모리 누수 탐지

사용될 코드)

Screenshot from 2021-12-18 16-32-06.png

다음과 같은 코드를 실행하면, 메모리가 1바이트씩 100번 할당되고, 모두가 free되지 않은 채 프로그램이 종료됩니다.

이를 Valgrind를 통해 검사해보면,

Screenshot from 2021-12-18 16-32-50.png

다음과 같은 결과를 볼 수 있습니다.

이 때 —leak-check=full 옵션을 사용해서 다시 돌려보면,

Screenshot from 2021-12-18 16-34-01.png

프로그램의 어떤 함수서 leak가 발생하고 있는지 확인 할 수 있고,

Screenshot from 2021-12-18 16-34-34.png

gcc로 컴파일할 때 -g 옵션을 주게 되면, 위와 같이 어떤 파일의 몇번 째 줄에서 발생했는지 볼 수 있습니다.

예시로 만든 코드가 단순해 큰 의미가 없어 보이지만, 프로그램이 커지고 할당을 잡아주는 부분이 많아지다 보면 이런 기능이 정말 유용하게 쓰입니다.

Screenshot from 2021-12-18 18-23-13.png

코드를 수정해 할당된 메모리를 모두 해제해 주게 되면,

Screenshot from 2021-12-18 18-23-43.png

no leaks are possible이라는 메세지를 볼 수 있습니다.

2) uninitialized value 사용 경고