calloc()

Выделить память под массив

Прототип:

#include <stdlib.h>
void * calloc( size_t n,
size_t size );

Аргументы:

n
Количество элементов в массиве для выделения.
size
Размер элемента массива в байтах.

Библиотека:

libc

Описание:

Функция calloc() выделяет пространство в куче для массива из n объектов по size байтов каждый и инициализирует их 0. Используйте free() или realloc() для освобождения блока памяти.


Note: Так как реализация malloc() использует знаковые 32-битные целые для внутреннего представления размера, нельзя выделить более 2 GB за один раз. Если размер превышает 2 GB, calloc() завершается с ошибкой ENOMEM.

Если n или size равны нулю, поведением по умолчанию является возврат указателя, не равного NULL, который доступен только для соответствующего вызова free() или realloc(). Не следует полагать, что этот указатель будет указывать на корректную память. Данное поведение можно контролировать с помощью переменной окружения MALLOC_OPTIONS; если значение MALLOC_OPTIONS содержит V, calloc() возвращает указатель равный NULL. Данная переменная среды влияет также на malloc() и realloc(). Это поведение известно как поведение “System V”.

Возвращаемое значение:

Указатель на начало выделенной памяти. Если возникла ошибка, функция возвращает NULL, код ошибки записывается в errno.

Коды ошибок:

ENOMEM
Недостаточно памяти.
EOK
Успешное завершение.

Примеры:

#include <stdlib.h>
#include <stdio.h>
int main( void )
{
char* buffer;
buffer = (char* )calloc( 80, sizeof( char ) );
if ( buffer == NULL )
{
printf( "Can't allocate memory for buffer!\n" );
return (EXIT_FAILURE);
}
free( buffer );
return (EXIT_SUCCESS);
}

Переменные окружения:

MALLOC_OPTIONS
Описание см. на странице malloc().

Классификация:

ANSI, POSIX 1003.1

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Да

Тематические ссылки:

free(), malloc(), realloc(), sbrk()




Предыдущий раздел: Описание API системной библиотеки