Love Every Moment

〔C언어〕메모리 누수 검사하기 본문

PROGRAMMING::LANGUAGE/C

〔C언어〕메모리 누수 검사하기

해 송 2021. 6. 4. 20:45
반응형

 

 

1. leaks 명령어

 

(1) 파일 실행 중에 검사하기

  • main 문 안에 while 문을 사용하는 등의방법을 써서 프로그램이 종료되지 않도록 하고
  • 컴파일 후에 ./a.out  으로 파일을 실행시키고  leaks a.out

 

※ 해당 방법으로 메모리 누수가 뜨지 않는 경우가 있어서 (2)번 방법을 추천

 

 

(2) 프로그램 내부에 leaks 명령어 삽입

  • main 문 안에 직접 삽입했기 때문에 프로그램이 종료되기 전에 검사 가능
  • system 명령어를 통해 쉘 명령어를 main 문 안에서도 사용할 수 있다.

 

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 *str;

	str = (char *)malloc(sizeof(char) * 6);
	str[0] = 'a';
	str[1] = 'b';
	str[2] = 'c';
	str[3] = 'd';
	str[4] = '\0';

	free(str);
	system("leaks a.out > leaks_result_temp; cat leaks_result_temp | 
    	grep leaked && rm -rf leaks_result_temp");
	return (0);
}

 

 


 

2. 컴파일 옵션으로 검사하기

gcc -g3 -fsanitize=address

 

예를 들어 main.c 라는 파일에 main 문이 들어있고 사용하는 헤더 파일이 libft.a 라고 하면

gcc -g3 -fsanitize=address main.c libft.a  로 컴파일 하고

./a.out 으로 실행시키면 메모리 누수 여부를 확인할 수 있다.

 

주의할 점은 위의 1번에서 소개한 leaks 명령어와 함께 사용할 수 없다는 점이다.

 


 

3. valgrind

 

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

macOS Catalina부터는 작동하지 않는다.

 

컴퓨터 프로그래밍 코딩

반응형
Comments