동적할당
[C] 동적할당
동적할당이란?
프로그램 실행 중에 동적으로 메모리를 할당하는 것을 의미하며, 힙(Heap) 영역에 메모리를 확보한다.
특징
- include <stdlib.h> 헤더 파일이 필요하다.
동적 메모리 관리를 위한 주요 함수:
메모리 관련 함수
malloc: 메모리를 원하는 크기만큼 할당
void* malloc(size_t size)
예: malloc(sizeof(int) * 4) → int형 변수 4개 크기만큼 할당
calloc: 메모리 할당과 동시에 0으로 초기화
void* calloc(size_t nelem, size_t elsize)
첫 번째 인자: 요소 개수, 두 번째 인자: 요소 크기
realloc: 기존 메모리 크기를 변경 (추가/축소)
void* realloc(void* ptr, size_t size)
원래 메모리의 내용을 유지하면서 크기를 변경함
free: 동적할당된 메모리 해제
void free(void* ptr)
중요: 메모리 해제
동적으로 할당된 메모리는 사용이 끝나면 반드시 free()를 사용해 해제해야 한다. 그렇지 않으면 메모리 누수(memory leak)가 발생할 수 있다.
예제 코드
- include <stdio.h>
- include <stdlib.h>
int main(void) { int arr[4] = { 4, 3, 2, 1 }; int* pArr;
// 동적할당: int형 4개만큼 메모리 할당 pArr = (int*)malloc(sizeof(int) * 4);
if(pArr == NULL) {
printf("malloc error\n"); exit(1);
}
for(int i = 0; i < 4; ++i) {
pArr[i] = arr[i];
}
for(int i = 0; i < 4; ++i) {
printf("%d\n", pArr[i]);
}
// 메모리 해제 free(pArr);
return 0;
}
코드 설명
(int*): malloc은 void*를 반환하므로 형변환 필요
sizeof(int): int형의 바이트 크기 (일반적으로 4바이트)
- 4: 배열 4개 요소의 메모리 확보
free(pArr): 사용 후 반드시 메모리 해제