Espacios de nombres
Variantes
Acciones

malloc

De cppreference.com
< c‎ | memory
Definido en la cabecera <stdlib.h>
void* malloc( size_t tamaño );

Asigna determinados bytes de tamaño de almacenamiento no inicializado.

Si la asignación tiene éxito, devuelve un puntero al byte más bajo (el primero) en el bloque de memoria asignado que está alineado adecuadamente para cualquier tipo de objeto con alineación fundamental.

Si el tamaño es cero, el comportamiento está definido en la implementación (el puntero nulo puede ser devuelto, o algún puntero no nulo puede ser devuelto que no puede ser usado para acceder al almacenamiento, pero tiene que ser pasado a free).

malloc es seguro para hilos: se comporta como si sólo accediera a las posiciones de memoria visibles a través de su argumento, y no a cualquier almacenamiento estático.

Una llamada previa a free o realloc que desasigna una región de memoria se sincroniza con una llamada a un malloc que asigna la misma o parte de la misma región de memoria. Esta sincronización se produce después de cualquier acceso a la memoria por parte de la función de desasignación y antes de cualquier acceso a la memoria por parte de malloc. Hay un solo orden total de todas las funciones de asignación y desasignación que operan en cada región particular de la memoria.

(desde C11)

Contenido

[editar] Parametros

tamaño - número de bytes a asignar

[editar] Valor de retorno

En caso de éxito, devuelve el puntero al principio de la nueva memoria asignada. Para evitar una fuga de memoria, el puntero devuelto debe estar desasignado con free() o realloc().

En caso de fallo, devuelve un puntero nulo.

[editar] Ejemplo

#include <stdio.h>   
#include <stdlib.h> 
 
int main(void) 
{
    int *p1 = malloc(4*sizeof(int));  // asigna suficiente para un arreglo de 4 int
    int *p2 = malloc(sizeof(int[4])); // lo mismo, nombrando el tipo directamente
    int *p3 = malloc(4*sizeof *p3);   // lo mismo, sin repetir el nombre del tipo
 
    if(p1) {
        for(int n=0; n<4; ++n) // rellena el arreglo
            p1[n] = n*n;
        for(int n=0; n<4; ++n) // lo imprime fuera
            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

[editar] Referencias

  • Standard C11 (ISO/IEC 9899:2011):
  • 7.22.3.4 The malloc function (p: 349)
  • Standard C99 (ISO/IEC 9899:1999):
  • 7.20.3.3 The malloc function (p: 314)
  • Standard C89/C90 (ISO/IEC 9899:1990):
  • 4.10.3.3 The malloc function

[editar] Véase también