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

Consulte también

Asignación de memoria
free
malloc
realloc