calloc
|
헤더 파일에 정의됨
<stdlib.h>
|
||
num 개의 size 크기 객체 배열을 위한 메모리를 할당하고 할당된 저장 공간의 모든 바이트를 0으로 초기화합니다.
할당이 성공하면, 기본 정렬 을 가진 모든 객체 타입에 적합하게 정렬된 할당된 메모리 블록에서 가장 낮은(첫 번째) 바이트를 가리키는 포인터를 반환합니다.
만약 size 가 0이면, 동작은 구현에 따라 정의됩니다 (널 포인터가 반환될 수도 있고, 저장 공간에 접근하는 데 사용할 수 없는 일부 널이 아닌 포인터가 반환될 수도 있습니다).
|
메모리 영역을 해제하는
free
,
free_sized
, 그리고
free_aligned_sized
(C23부터)
또는
realloc
의 이전 호출은 동일한 메모리 영역 전체 또는 일부를 할당하는
|
(C11부터) |
목차 |
매개변수
| num | - | 객체 개수 |
| size | - | 각 객체의 크기 |
반환값
성공 시, 새로 할당된 메모리의 시작 포인터를 반환합니다. 메모리 누수를 방지하기 위해 반환된 포인터는 free() 또는 realloc() 로 해제해야 합니다.
실패 시, 널 포인터를 반환합니다.
참고 사항
정렬 요구 사항으로 인해, 할당된 바이트 수는 반드시 num * size 와 같지 않을 수 있습니다.
모든 비트를 0으로 초기화하는 것이 부동 소수점이나 포인터가 각각 0.0 과 널 포인터 값으로 초기화됨을 보장하지는 않습니다 (비록 모든 일반적인 플랫폼에서 이것이 사실이지만).
원래(C89에서), 다음과 같은 코드를 수용하기 위해 제로 크기 지원이 추가되었습니다.
OBJ* p = calloc(0, sizeof(OBJ)); // "길이 0" 플레이스홀더 ... while(1) { p = realloc(p, c * sizeof(OBJ)); // 크기가 안정될 때까지 재할당 ... // c를 변경하거나 루프를 탈출할 수 있는 코드 }
예제
#include <stdio.h> #include <stdlib.h> int main(void) { int* p1 = calloc(4, sizeof(int)); // 4개의 int 배열을 할당하고 0으로 초기화 int* p2 = calloc(1, sizeof(int[4])); // 동일하게, 배열 타입을 직접 명시 int* p3 = calloc(4, sizeof *p3); // 동일하게, 타입 이름을 반복하지 않음 if (p2) { for (int n = 0; n < 4; ++n) // 배열 출력 printf("p2[%d] == %d\n", n, p2[n]); } free(p1); free(p2); free(p3); }
출력:
p2[0] == 0 p2[1] == 0 p2[2] == 0 p2[3] == 0
참고문헌
- C23 표준 (ISO/IEC 9899:2024):
-
- 7.22.3.2 calloc 함수 (p: TBD)
- C17 표준 (ISO/IEC 9899:2018):
-
- 7.22.3.2 calloc 함수 (p: 253)
- C11 표준 (ISO/IEC 9899:2011):
-
- 7.22.3.2 calloc 함수 (p: 348)
- C99 표준 (ISO/IEC 9899:1999):
-
- 7.20.3.1 calloc 함수 (p: 313)
- C89/C90 표준 (ISO/IEC 9899:1990):
-
- 4.10.3.1 calloc 함수
참고 항목
|
C++ 문서
for
calloc
|