malloc
|
Definido en el encabezado
<stdlib.h>
|
||
|
void
*
malloc
(
size_t
size
)
;
|
||
Asigna
size
bytes de almacenamiento no inicializado.
Si la asignación tiene éxito, retorna un puntero que está adecuadamente alineado para cualquier tipo de objeto con alineamiento fundamental .
Si
size
es cero, el comportamiento de
malloc
está definido por la implementación. Por ejemplo, puede devolverse un puntero nulo. Alternativamente, puede devolverse un puntero no nulo; pero dicho puntero no debe ser
desreferenciado
, y debe pasarse a
free
para evitar fugas de memoria.
|
Una llamada previa a
free
,
free_sized
, y
free_aligned_sized
(desde C23)
o
realloc
que desasigna una región de memoria
se sincroniza con
una llamada a
|
(desde C11) |
Contenidos |
Parámetros
| size | - | número de bytes a asignar |
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.
Ejemplo
#include <stdio.h> #include <stdlib.h> int main(void) { int *p1 = malloc(4*sizeof(int)); // asigna suficiente para un array de 4 int int *p2 = malloc(sizeof(int[4])); // igual, nombrando el tipo directamente int *p3 = malloc(4*sizeof *p3); // igual, sin repetir el nombre del tipo if(p1) { for(int n=0; n<4; ++n) // poblar el array p1[n] = n*n; for(int n=0; n<4; ++n) // imprimirlo nuevamente printf("p1[%d] == %d\n", n, p1[n]); } free(p1); free(p2); free(p3); }
Salida:
p1[0] == 0 p1[1] == 1 p1[2] == 4 p1[3] == 9
Referencias
- Estándar C17 (ISO/IEC 9899:2018):
-
- 7.22.3.4 La función malloc (p: 254)
- Estándar C11 (ISO/IEC 9899:2011):
-
- 7.22.3.4 La función malloc (p: 349)
- Estándar C99 (ISO/IEC 9899:1999):
-
- 7.20.3.3 La función malloc (p: 314)
- Estándar C89/C90 (ISO/IEC 9899:1990):
-
- 4.10.3.3 La función malloc
Véase también
|
desasigna memoria previamente asignada
(función) |
|
|
C++ documentation
para
malloc
|
|