Notice
Recent Posts
Recent Comments
Link
Love Every Moment
〔C언어〕메모리 누수 검사하기 본문
반응형
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부터는 작동하지 않는다.
컴퓨터 프로그래밍 코딩
반응형
'PROGRAMMING::LANGUAGE > C' 카테고리의 다른 글
〔C언어〕궁금증: 왜 '10' 을 int 로 출력하면 12592 가 될까? (0) | 2021.12.16 |
---|---|
〔C언어〕서식지정자(Format Specifier)란? (0) | 2021.06.12 |
〔C언어〕댕글링 포인터(Dangling Pointer)란? (0) | 2021.05.27 |
〔C언어〕정적 변수(Static Variable)란? (0) | 2021.05.19 |
〔C언어〕size_t 와 unsigned int 의 차이? (0) | 2021.05.07 |
Comments