C 메모리 누수 검사하기

이태혁·2020년 7월 22일
1

메모리 누수 검사하기

valgrind라는 프로그램이 macOS mojave버전 이하에서 작동하는 메모리 누수를 검사 프로그램이다.

macOS Catalina부터는 작동을 안하는 관계로 메모리 누수를 검사하는 방법을 정리했다.

1. ex01)파일 실행하고 leak명령어로 검사

  • 컴파일 후에 파일을 ./a.out 이런식으로 실행하고 leaks a.out
  • 다만 이때 파일이 실행중이어야지 검사할 수 있음
  • while문으로 강제로 프로그램이 종료되지 않게 하고 leaks로 검사할수도 있지만 굳이??

2. leaks명령어를 프로그램 코드에 삽입

  • 1번의 단점을 보완한 방식
  • 프로그램 내부에 leaks를 삽입하여 프로그램이 종료되기 전에 leak되 부분이 있으면 출력되게끔 한다.
    코드는 아래와 같다.

system("leaks a.out > leaks_result_temp; cat leaks_result_temp | grep leaked" && rm -rf leaks_result_temp);

#include <stdlib.h>
#include <string.h>

int main(void)
{
	char *heap;

	heap = malloc(sizeof(char) * 6);
	heap[0] = 'h';
	heap[1] = 'e';
	heap[2] = 'l';
	heap[3] = 'l';
	heap[4] = 'o';
	heap[5] = '\0';

	free(heap);
	system("leaks a.out > leaks_result; cat leaks_result 
    	| grep leaked && rm -rf leaks_result");
	return (0);
}
profile
back-end, cloud, docker, web의 관심이 있는 예비개발자입니다.

1개의 댓글

comment-user-thumbnail
2020년 12월 1일

코드 태그 부분에 오타가 있습니다! (한줄짜리 코드태그)
system("leaks a.out > leaks_result_temp; cat leaks_result_temp | grep leaked" && rm -rf leaks_result_temp);

system("leaks a.out > leaks_result_temp; cat leaks_result_temp | grep leaked && rm -rf leaks_result_temp");
로 쓰면 정상작동 됩니다.

유용하게 쓰겠습니다 감사합니다~~

답글 달기