동적 할당한 메모리는 사용 후 반드시 free()를 호출하여 해제해야 한다.
해제하지 않으면 메모리 누수(Memory Leak)가 발생하여 시스템 리소스가 낭비된다.
메모리 누수 방지 예시
#include <stdio.h>
#include <stdlib.h>
void process_data() {
// 1. 메모리 할당
int *arr = (int*)malloc(sizeof(int) * 10);
if (arr == NULL) return;
// ... 데이터 처리 ...
// 2. 메모리 해제 (잊지 말 것!)
free(arr);
arr = NULL; // 해제 후 NULL로 초기화하여 허상 포인터 방지
}
int main() {
process_data();
return 0;
}
코드 설명:
– malloc으로 할당된 메모리는 힙(Heap) 영역에 위치하며, 프로그래머가 직접 관리해야 한다.
– free() 호출 후 포인터를 NULL로 설정하는 습관은 이미 해제된 메모리에 다시 접근하는 실수를 막아준다.
C언어 메모리 누수 체크를 정리하려고 했는데, 정리보다 질문이 더 많이 나왔다.
주소값 출력을 직접 찍어 보니 흐름을 다시 따라가 보니 정의는 외웠는데 조건이 바뀌는 순간 판단이 흔들렸다.
그래서 오늘은 정리 순서를 바꿔서 다시 접근했다.
짧은 예제를 새로 짜 보면서 체크가 실제로 어디에 걸리는지 확인했다.
오늘 정리는 길지 않았지만 밀도는 높았다.
C언어 메모리 누수 체크은 내일 한 번 더 확인해 볼 생각인 것 같다.