복사로 메모리 할당하는데 어딜 복사할까?? => heap

C 언어에서는 일반적으로 컴파일 시점에 메모리를 할당하는 정적 메모리 할당과, 프로그램 실행 중 필요한 시점에 메모리를 할당하는 동적 메모리 할당
int arr[10]; // 크기가 고정됨
int *arr = malloc(sizeof(int) * 10); // 런타임에 크기 결정
void* malloc(size_t size);
size만큼의 메모리를 할당만 하고 초기화는 하지 않음NULL 반환예시
int *arr = malloc(sizeof(int) * 5); // int 5개 크기의 메모리 할당
arr[0] ~ arr[4]는 초기화되지 않아 쓰레기값이 들어있음void* calloc(size_t n, size_t size);
n * size 만큼 메모리를 할당하고, 모든 바이트를 0으로 초기화예시
int *arr = calloc(5, sizeof(int)); // int 5개, 0으로 초기화
void* realloc(void* ptr, size_t new_size);
ptr)의 크기를 new_size만큼 재조정ptr을 변경함예시
arr = realloc(arr, sizeof(int) * 10); // 기존 arr를 10개 크기로 확장
주의 사항
malloc, calloc, realloc은 성공 시 void* 포인터 반환 → 형변환 필요 없음 (C에서)free()로 해제해야 메모리 누수 방지realloc은 실패 시 NULL을 반환하므로 기존 포인터를 덮기지 말고 임시 포인터에 저장 후 검사하는 게 안전| 함수 | 역할 | 초기화 여부 | 사용 예시 |
|---|---|---|---|
malloc | 메모리 할당 | ❌ | malloc(10 * sizeof(int)) |
calloc | 메모리 할당 + 0으로 초기화 | ✅ | calloc(10, sizeof(int)) |
realloc | 메모리 크기 재조정 | 유지 | realloc(ptr, new_size) |