calloc
Asigna una matriz en la memoria con elementos que se inicializan en 0.
Sintaxis
void *calloc(
size_t number,
size_t size
);
Parámetros
number
Número de elementos.
size
Longitud en bytes de cada elemento.
Valor devuelto
calloc
devuelve un puntero al espacio asignado. El espacio de almacenamiento al que apunta el valor devuelto se alinea adecuadamente para el almacenamiento de cualquier tipo de objeto. Para obtener un puntero a un tipo distinto de void
, use una conversión de tipo en el valor devuelto.
Comentarios
La función calloc
asigna espacio de almacenamiento para una matriz de number
elementos, cada uno de size
bytes de longitud. Cada elemento se inicializa en 0.
calloc
establece errno
en ENOMEM
si se produce un error de asignación de memoria o si la cantidad de memoria solicitada supera _HEAP_MAXREQ
. Para obtener más información sobre este y otros códigos de error, vea errno
, _doserrno
, _sys_errlist
y _sys_nerr
.
En la implementación de Microsoft, si number
o size
es cero, calloc
devuelve un puntero a un bloque asignado con un tamaño distinto de cero. Un intento de leer o escribir mediante el puntero devuelto conduce a un comportamiento indefinido.
calloc
usa la función _set_new_mode
de C++ para establecer el nuevo modo de controlador. El nuevo modo de controlador indica si, en caso de error, calloc
va a llamar a la rutina del nuevo controlador, según lo establecido por _set_new_handler
. De forma predeterminada, calloc
no llama a la rutina del nuevo controlador en caso de error al asignar memoria. Puede invalidar este comportamiento predeterminado para que, cuando calloc
no pueda asignar memoria, llame a la rutina del nuevo controlador de la misma forma que hace el operador new
cuando se produce un error por la misma razón. Para invalidar el valor predeterminado, llame a
_set_new_mode(1);
al principio del programa, o vincule con NEWMODE.OBJ
(consulte Opciones de vínculo).
Cuando la aplicación se vincula con una versión de depuración de las bibliotecas en tiempo de ejecución de C, calloc
se resuelve como _calloc_dbg
. Para obtener más información sobre cómo se administra el montón durante el proceso de depuración, consulte El montón de depuración de CRT.
calloc
está marcado como __declspec(noalias)
y __declspec(restrict)
, lo que significa que se garantiza que la función no modifica variables globales y que el puntero devuelto no tiene alias. Para obtener más información, vea noalias
y restrict
.
De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.
Requisitos
Routine | Encabezado necesario |
---|---|
calloc |
<stdlib.h> y <malloc.h> |
Para obtener más información sobre compatibilidad, consulte Compatibilidad.
Ejemplo
// 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