기본 패턴
c
int *numbers = malloc(sizeof(int) * count);
if (numbers == NULL) {
return 1;
}
free(numbers);설명
- 동적 메모리는 배열 크기를 실행 중에 정해야 할 때 유용합니다.
malloc은 필요한 바이트 수만큼 메모리를 확보하고 주소를 돌려줍니다.calloc은 메모리를 0으로 초기화하면서 할당합니다.- 사용을 마친 메모리는
free로 반납해야 누수가 쌓이지 않습니다.
짧은 예제
c
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int count = 4;
int *numbers = malloc(sizeof(int) * count);
if (numbers == NULL) {
return 1;
}
for (int i = 0; i < count; i++) {
numbers[i] = (i + 1) * 10;
}
printf("%d %d\n", numbers[0], numbers[3]);
free(numbers);
return 0;
}빠른 정리
| 항목 | 설명 |
|---|---|
malloc | 지정한 바이트 수만큼 메모리 확보 |
calloc | 메모리 확보 + 0 초기화 |
free | 확보한 메모리 반납 |
NULL 검사 | 할당 실패 여부 확인 |
| 누수 | free를 빠뜨리면 메모리가 해제되지 않음 |
주의할 점
이미 해제한 포인터를 다시 free하거나 계속 사용하면 정의되지 않은 동작이 발생합니다. 해제 후 NULL로 돌려 두는 습관이 도움이 됩니다.