calloc
|
Definido en el encabezado
<stdlib.h>
|
||
Asigna memoria para un array de num objetos de size e inicializa todos los bytes en el almacenamiento asignado a cero.
Si la asignación tiene éxito, devuelve un puntero al byte más bajo (primero) en el bloque de memoria asignado que está adecuadamente alineado para cualquier tipo de objeto con alineamiento fundamental .
Si size es cero, el comportamiento está definido por la implementación (puede devolverse un puntero nulo, o puede devolverse algún puntero no nulo que no pueda utilizarse para acceder al almacenamiento).
|
Una llamada previa a
free
,
free_sized
, y
free_aligned_sized
(desde C23)
o
realloc
que desasigna una región de memoria
sincroniza-con
una llamada a
|
(desde C11) |
Contenidos |
Parámetros
| num | - | número de objetos |
| size | - | tamaño de cada objeto |
Valor de retorno
En caso de éxito, devuelve el puntero al inicio de la memoria recién asignada. Para evitar una fuga de memoria, el puntero devuelto debe ser liberado con free() o realloc() .
En caso de fallo, devuelve un puntero nulo.
Notas
Debido a los requisitos de alineación, el número de bytes asignados no es necesariamente igual a num * size .
La inicialización a todos los bits en cero no garantiza que un número de punto flotante o un puntero se inicialicen a 0.0 y al valor de puntero nulo, respectivamente (aunque esto es cierto en todas las plataformas comunes).
Originalmente (en C89), se añadió soporte para tamaño cero para adaptarse a código como
OBJ* p = calloc(0, sizeof(OBJ)); // marcador de posición de "longitud cero" ... while(1) { p = realloc(p, c * sizeof(OBJ)); // reasignaciones hasta que el tamaño se estabilice ... // código que puede cambiar c o salir del bucle }
Ejemplo
#include <stdio.h> #include <stdlib.h> int main(void) { int* p1 = calloc(4, sizeof(int)); // asigna y pone a cero un array de 4 int int* p2 = calloc(1, sizeof(int[4])); // igual, nombrando directamente el tipo de array int* p3 = calloc(4, sizeof *p3); // igual, sin repetir el nombre del tipo if (p2) { for (int n = 0; n < 4; ++n) // imprime el array printf("p2[%d] == %d\n", n, p2[n]); } free(p1); free(p2); free(p3); }
Salida:
p2[0] == 0 p2[1] == 0 p2[2] == 0 p2[3] == 0
Referencias
- Estándar C23 (ISO/IEC 9899:2024):
-
- 7.22.3.2 La función calloc (p: TBD)
- Estándar C17 (ISO/IEC 9899:2018):
-
- 7.22.3.2 La función calloc (p: 253)
- Estándar C11 (ISO/IEC 9899:2011):
-
- 7.22.3.2 La función calloc (p: 348)
- Estándar C99 (ISO/IEC 9899:1999):
-
- 7.20.3.1 La función calloc (p: 313)
- Estándar C89/C90 (ISO/IEC 9899:1990):
-
- 4.10.3.1 La función calloc
Véase también
|
Documentación de C++
para
calloc
|