C언어 calloc(): 제로 초기화 메모리 할당과 실전 예제
C언어에서 calloc이란?
C언어의 calloc() 함수는 동일한 크기의 메모리 블록 여러 개를 할당하고 모든 바이트를 0으로 초기화합니다. 배열이나 구조체 같은 복잡한 데이터 구조에 사용되는 동적 할당 루틴으로, void * 포인터를 반환합니다.
malloc()이 단일 연속 블록을 예약하는 반면, calloc()은 각각 size 바이트인 n개의 블록을 요청하며, 이들이 제로화되고 연속적임을 보장합니다.
문법
ptr = (cast_type *)calloc(n, size);
n개의 블록을 요청, 각 블록은 size 바이트.
- 모든 바이트가 자동으로 0으로 설정됨.
- 할당된 영역의 첫 바이트를 가리키는 포인터 반환, 요청 실패 시
NULL 반환.
calloc 사용 예제
다음 프로그램은 calloc()을 사용해 등차수열의 첫 10개 항의 합을 계산하는 방법을 보여줍니다.
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int *ptr, sum = 0;
ptr = calloc(10, sizeof(int));
if (!ptr) {
fprintf(stderr, "Error! Memory not allocated.\n");
return EXIT_FAILURE;
}
printf("첫 10개 항의 합 계산:\n");
for (int i = 0; i < 10; ++i) {
ptr[i] = i;
sum += ptr[i];
}
printf("합계 = %d\n", sum);
free(ptr);
return EXIT_SUCCESS;
}
출력
첫 10개 항의 합 계산:
합계 = 45