728x90
🌸 Memory Leak (메모리 릭, 메모리 누수)란?

Memory Leak이란?
“동적으로 할당한 메모리가 free(할당 해제)될 수 없는 상태가 된 것.”
(개발자가 동적으로 할당한 메모리를 free할 수 없는 상태로 만든 것)
Memory Leak, 무엇이 문제인가?
실무에서는 메모리를 자주, 많이 할당한단다. 그런데 메모리를 할당해 사용한 뒤 해제를 해주지 않으면 메모리 사용량이 계속 증가하게 되고, 결국 시스템의 메모리가 부족해져 운영체제가 프로그램을 강제로 종료시키거나 메모리 할당에 실패하기 때문이다.

Memory Leak 대표적 예시
char *a = malloc(20); // 포인터 변수 a에 동적 메모리 할당 char *b = malloc(10); // 포인터 변수 b에 동적 메모리 할당 b = a; // b가 가지고 있던 주소값을 a에 할당 free(a); // 포인터 a에 할당한 20바이트의 메모리를 해제 free(b); // 포인터 b에 할당한 10바이트의 메모리가 아닌 a에 할당한 20바이트 메모리 해제 // 포인터 b에 할당했던 10바이트 메모리가 할당 해제 될 수 없는 상태가 됨(memory leak 발생)
C
개발자가 포인터 변수 b에 10바이트 분량의 메모리를 할당해놓고서는 포인터 변수 b에다가 포인터 변수 a에 할당한 메모리의 주소를 할당했으니, 포인터 변수 b는 더이상 10바이트짜리 메모리를 가리키지 않고 포인터 변수 a와 함께 20바이트짜리 메모리를 가리키는 상태다.
이에 따라 포인터 변수 b에 할당했던 10바이트 분량의 메모리는 free(할당해제)할 수 없는 상태가 됐다. (memory leak)
이를 도식화 하면 아래와 같다.


free(b)를 해봤자 10바이트 메모리를 해제할 수 없다.
Memory Leak 이런저런 예시
동적 메모리를 할당한 포인터 변수로 포인터 연산(e.g. 반복문)을 하여 동적 메모리를 할당한 메모리의 시작주소값이 아닌 상태에서 free를 하는 경우.
c_ptr = malloc(10); if (c_ptr == 0) return (-1); while (*c_ptr) { c_ptr++; } free(c_ptr);
C
동적 메모리 할당을 받은 포인터 변수가 free되지 않은 채 선언된 블록({ })을 벗어난 경우
프로그램이 정상종료되기 전에 free(할당 해제)를 하지 않은 경우
프로그램이 에러에 따른 종료(예: write함수 에러로 인한 종료) 에 대비하여 종료 전 free(할당 해제) 조치를 하지 않은 경우
할당 해제를 하는 중간에 에러가 발생한 경우
Memory Leak 을 피할 수 있는 좋은 습관
malloc이나 calloc 함수를 쓰면 바로 free를 써놓고 코딩을 이어간다.
char *str = (char*)malloc(n * sizeof(char)); // 코드 free(str);
C
동적 메모리 할당을 한 포인터를 코딩에 직접 사용하지 않고, 임시포인터변수를 활용한다.
int *ptr = (int*)malloc(sizeof(int)); int *temp = ptr; free(ptr);
C
동적 메모리를 할당한 프로그램에서 오류나 예외처리로 바로 프로그램 종료를 시키는 코드를 작성할 때 return 전에 할당한 메모리를 free해주는 것 잊지 않기.
if (wirte(1, "42seoul", 7) == -1) { free(메모리); return; }
C
출처: https://80000coding.oopy.io/c69e055e-564c-42a9-959f-c525b7666d3d
728x90
'컴퓨터 활용(한글, 오피스 등) > 기타' 카테고리의 다른 글
| 이기종 스토리지 이관 시 UVM,TSM 이관 방식과 동일기종 스토리지 이관 시 TC 방식 사용 이유 및 장단점 비교 (0) | 2025.07.03 |
|---|---|
| XSSF, SXSSF, 그리고 SAX 비교 (0) | 2025.07.03 |
| 한국어 잘하는 AI : 엑사원(Exaone) 3.5 사용 방법 (0) | 2025.07.03 |
| 프로젝트 관리 지식 체계(PMBOK)의 5단계 프로세스 그룹 및 10가지 지식 영역 (1) | 2025.07.03 |
| 솔라리스 SOLARIS에서 힙메모리 사이즈 구하기 명령어 (0) | 2025.07.02 |