calloc
Выделяет массив в памяти и инициализирует его элементы значением 0.
Синтаксис
void *calloc(
size_t number,
size_t size
);
Параметры
number
Число элементов.
size
Длина каждого элемента в байтах.
Возвращаемое значение
calloc
возвращает указатель на выделенную память. Пространство хранилища, на которое указывает возвращаемое значение, подходит для хранения любого типа объекта. Чтобы получить указатель на тип, отличный от void
, используйте приведение типов для возвращаемого значения.
Замечания
Функция calloc
выделяет пространство для хранения массива из number
элементов, каждый из которых имеет размер size
. Каждый элемент инициализируется значением 0.
Функция calloc
задает для параметра errno
в значение ENOMEM
, если выделение памяти завершается сбоем или количество запрошенной памяти превышает _HEAP_MAXREQ
. Сведения об этом и других кодах ошибок см. в разделе errno
, _doserrno
_sys_errlist
и _sys_nerr
.
В реализации Майкрософт, если number
или size
равно нулю, calloc
возвращает указатель на выделенный блок ненулевых размеров. Попытка чтения или записи с помощью возвращаемого указателя приводит к неопределенному поведению.
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