calloc
0으로 초기화된 요소가 있는 메모리에 배열을 할당합니다.
구문
void *calloc(
size_t number,
size_t size
);
매개 변수
number
요소의 수입니다.
size
각 요소의 길이입니다(바이트).
반환 값
calloc
은 할당된 공간에 대한 포인터를 반환합니다. 반환 값이 가리키는 스토리지 공간은 모든 개체 형식의 스토리지에 적합하게 정렬됩니다. void
가 아닌 형식의 포인터를 가져오려면 반환 값에 형식 캐스팅을 사용합니다.
설명
calloc
함수는 각각 size
바이트 길이의 number
요소 배열에 대한 스토리지 공간을 할당합니다. 각 요소는 0으로 초기화됩니다.
메모리 할당에 실패하거나 요청된 메모리의 양이 _HEAP_MAXREQ
를 초과하는 경우 calloc
는 errno
를 ENOMEM
으로 설정합니다. 이 코드 및 기타 오류 코드에 대한 자세한 내용은 , _doserrno
, _sys_errlist
및 _sys_nerr
를 참조하세요errno
.
Microsoft 구현에서 0이거나 size
0 calloc
이면 number
할당된 0이 아닌 크기의 블록에 대한 포인터를 반환합니다. 반환된 포인터를 통해 읽거나 쓰려고 시도하면 정의되지 않은 동작이 발생합니다.
calloc
에서는 C++ _set_new_mode
함수를 사용하여 새 처리기 모드를 설정합니다. 새 처리기 모드는 실패 시 calloc
이 _set_new_handler
에서 설정한 대로 새 처리기 루틴을 호출하는지 여부를 나타냅니다. 기본적으로 calloc
메모리를 할당하지 못한 경우 새 처리기 루틴을 호출하지 않습니다. 이 기본 동작을 재정의하여 메모리 할당에 실패할 때 calloc
동일한 이유로 실패할 때 연산자가 수행하는 것과 동일한 방식으로 new
새 처리기 루틴을 호출할 수 있습니다. 기본값을 재정의하려면 다음 코드를
_set_new_mode(1);
프로그램 초기 단계 또는 링크(NEWMODE.OBJ
링크 옵션 참조).
애플리케이션이 C 런타임 라이브러리 calloc
의 디버그 버전과 연결되면 .로 확인 _calloc_dbg
됩니다. 디버깅 프로세스 중에 힙을 관리하는 방법에 대한 자세한 내용은 CRT 디버그 힙을 참조하세요.
calloc
가 표시 __declspec(noalias)
되고 __declspec(restrict)
, 함수가 전역 변수를 수정하지 않도록 보장되고 반환된 포인터가 별칭이 지정되지 않음을 의미합니다. 자세한 내용은 noalias
및 restrict
를 참조하세요.
기본적으로 이 함수의 전역 상태는 애플리케이션으로 범위가 지정됩니다. 이 동작을 변경하려면 CRT 전역 상태를 참조하세요.
요구 사항
루틴에서 반환된 값 | 필수 헤더 |
---|---|
calloc |
<stdlib.h> 및 <malloc.h> |
호환성에 대한 자세한 내용은 호환성을 참조하세요.
예시
// crt_calloc.c
// This program uses calloc to allocate space for
// 40 long integers. It initializes each element to zero.
#include <stdio.h>
#include <malloc.h>
int main( void )
{
long *buffer;
buffer = (long *)calloc( 40, sizeof( long ) );
if( buffer != NULL )
printf( "Allocated 40 long integers\n" );
else
printf( "Can't allocate memory\n" );
free( buffer );
}
Allocated 40 long integers