Namespaces
Variants

malloc

From cppreference.net
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.

malloc es seguro para hilos: se comporta como si solo accediera a las ubicaciones de memoria visibles a través de su argumento, y no a ningún almacenamiento estático.

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 malloc que asigna la misma o una parte de la misma región de memoria. Esta sincronización ocurre después de cualquier acceso a la memoria por la función desasignadora y antes de cualquier acceso a la memoria por malloc . Existe un único orden total de todas las funciones de asignación y desasignación que operan sobre cada región particular de memoria.

(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)