Поделиться через


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

См. также

Распределение памяти
free
malloc
realloc