C언어 free() 함수 마스터하기: 실전 가이드와 예제
C언어에서 free() 함수란?
free() 함수는 C 표준 라이브러리의 일부로, malloc(), calloc(), realloc()로 이전에 할당된 메모리를 해제합니다. 블록을 힙에 반환함으로써 프로그램의 메모리 풋프린트를 제어하고 사용 가능한 메모리 고갈을 방지합니다.
스택 변수와 달리 동적으로 할당된 메모리는 명시적으로 해제해야 합니다. free() 호출을 누락하면 메모리 누수가 발생하고 결국 out-of-memory 에러로 이어질 수 있습니다.
문법
void free(void *ptr);
여기서 ptr은 해제하려는 메모리 블록을 가리키는 포인터입니다. NULL 포인터를 전달하는 것은 안전하며 아무런 연산도 수행하지 않습니다.
실전 예제
#include <stdio.h>
#include <stdlib.h>
int main(void) {
// 10개 정수를 위한 공간 할당
int *ptr = malloc(10 * sizeof(*ptr));
if (ptr == NULL) {
fprintf(stderr, "Memory allocation failed\n");
return 1;
}
// 값 저장 및 출력
ptr[2] = 50;
printf("3번째 정수의 값은 %d\n", ptr[2]);
// 메모리 해제
free(ptr);
return 0;
}
출력:
3번째 정수의 값은 50
모범 사례
malloc() 등 할당 함수의 반환값을 사용 전 항상 확인하세요.
free() 호출 후 포인터를 NULL로 설정해 실수에 의한 이중 해제(double free)를 방지하세요.
- 동적으로 할당되지 않은 메모리는 해제하지 마세요.
- 메모리 사용을 마친 후 가능한 빨리
free()를 호출해 힙을 가볍게 유지하세요.