동적 메모리 할당과 관련 함수(malloc, calloc, realloc, free)
프로그램 실행 중 필요한 만큼 메모리를 할당받는 방식을 동적 메모리 할당이라고 하는데요. 주로 Heap 영역에서 메모리를 할당하며, 크기가 정해지지 않은 배열이나 구조체 등을 유연하게 다룰 수 있게 해줍니다.
- 정적 메모리 할당: 컴파일 시 크기 고정 (int arr[100])
- 동적 메모리 할당: 실행 시 크기 결정 (malloc 등 사용)
동적 메모리 할당 함수 malloc, calloc, realloc, free
- malloc(memory allocation): 초기화 없이 메모리를 할당하는 함수
- calloc(clear allocation): 0으로 초기화된 메모리를 할당하는 함수
- realloc(re-allocation): 할당된 메모리를 새 크기로 조정하는 함수
- free: 할당된 메모리를 해제하는 함수
함수 | 설명 | 특징 |
malloc(size) | 지정한 바이트 크기만큼 메모리 할당 | 초기화되지 않은 메모리 |
calloc(n, size) | n개의 요소를 size만큼 할당 | 0으로 초기화됨 |
realloc(ptr, new_size) | 기존 메모리 크기 조정 | 데이터 유지 가능 |
free(ptr) | 할당된 메모리 해제 | 메모리 누수 방지(필수) |
사용 예시
int *arr = malloc(5 * sizeof(int)); // int 5개 크기 할당 (초기화되지 않은 값 = 쓰레기 값)
int *zeroed = calloc(5, sizeof(int)); // int 5개 0으로 초기화된 메모리 할당
arr = realloc(arr, 10 * sizeof(int)); // 메모리 크기를 10개로 확장 (기존 값은 유지될 수도 있음)
// 메모리 해제
free(zeroed); // calloc으로 할당한 메모리 해제
free(arr); // realloc된 메모리 해제
주의 사항
- malloc / calloc 사용 후에는 반드시 free로 해제해야 함
- 반환값은 NULL일 수 있으므로 할당 여부 확인 필수
- realloc은 실패 시 NULL을 반환하므로 기존 포인터 유지가 안 될 수 있음
- 이 경우, 임시 포인터를 통해 예외 처리하는 것이 안전
int *temp = realloc(ptr, new_size);
if (temp == NULL) {
// 재할당 실패 처리
} else {
ptr = temp;
}
동적 메모리할당 정리
동적 메모리 할당은 유연한 자료구조 구현에 핵심적인 기술입니다. 메모리 낭비를 줄이고, 프로그램의 크기나 데이터량이 가변적일 때 유용하게 쓰이죠. 다만 해제하지 않으면 메모리 누수가 발생하기 때문에 주의가 필요합니다.
'크래프톤 정글 > CS기초(키워드, 개념정리)' 카테고리의 다른 글
[중간정리] 5주차 - B-Tree, C언어, 이진 탐색 트리, DP(Top-Down과 Bottom-Up) (0) | 2025.04.16 |
---|---|
[CS기초] 5주차 개념 정리 (0) | 2025.04.15 |
[CS기초] GCC(GNU Compiler Collection) (0) | 2025.04.14 |
[CS기초] 보이어-무어(Boyer-Moore) 문자열 탐색 알고리즘 (0) | 2025.04.14 |
[CS기초] KMP(Knuth-Morris-Pratt) 알고리즘 (0) | 2025.04.14 |