xenial (3) malloc.3.gz

Provided by: manpages-es_1.55-10_all bug

NOMBRE

       calloc, malloc, free, realloc - Asignar y liberar memoria dinámica

SINOPSIS

       #include <stdlib.h>

       void *calloc(size_t nmemb, size_t size);
       void *malloc(size_t size);
       void free(void *ptr);
       void *realloc(void *ptr, size_t size);

DESCRIPCIÓN

       calloc() asigna memoria para una matriz de nmemb elementos de size bytes cada uno y devuelve un puntero a
       la memoria asignada. La memoria es puesta a cero.

       malloc() asigna size bytes y devuelve un puntero a la memoria asignada. La memoria no es borrada.

       free() libera el espacio de memoria apuntado por ptr, que debe haber sido devuelto por una llamada previa
       a  malloc(),  calloc() o realloc().  En caso contrario, o si free(ptr) ya se ha llamado antes, se produce
       un comportamiento indefinido.  Si ptr es NULL, no se realiza ninguna operación.

       realloc() cambia el tamaño del bloque de memoria apuntado por ptr a size bytes.  El contenido permanecerá
       inalterado  hasta  el  mínimo  entre  el  tamaño viejo y el nuevo; la memoria recién asignada quedará sin
       inicializar.  Si ptr es NULL, la llamada es equivalente a malloc(size); si  size  es  igual  a  cero,  la
       llamada  es  equivalente  a  free(ptr).   ptr debe haber sido devuelto por una llamada previa a malloc(),
       calloc() o realloc(), a menos que ptr sea NULL.

VALOR DEVUELTO

       Para  calloc()  y  malloc(),  el  valor  devuelto  es  un  puntero  a  la  memoria  asignada,  que   está
       convenientemente alineada para cualquier tipo de variable, o NULL si la petición falla.

       free() no devuelve ningún valor.

       realloc()  devuelve  un  puntero  a  la memoria recién asignada, que está convenientemente preparada para
       cualquier tipo de variable y podría ser diferente de ptr, o NULL si la petición falla. Si size es igual a
       0,  se  devuelve  o  bien NULL o bien un puntero susceptible de ser pasado a free().Si realloc() falla el
       bloque original se queda como estaba - no es liberado ni movido.

CONFORME A

       ANSI-C

VÉASE TAMBIÉN

       brk(2), posix_memalign(3)

OBSERVACIONES

       El estándar Unix98 necesita que malloc(), calloc() y realloc() asignen a errno el valor ENOMEM en caso de
       fallo.  Glibc  asume  que esto se hace (y las versiones de glibc de estas rutinas hacen esto); si usa una
       implementación privada de malloc que no asinga un valor a errno, entonces ciertas rutinas  de  biblioteca
       pueden fallar sin que en errno aparezca el motivo del fallo.

       Los  caídas  de  malloc(),  free()  o  realloc()  casi siempre están relacionadas con la corrupción de la
       memoria montón (heap), tal como el desbordamiento de una porción de memoria reservada o la liberación del
       mismo puntero dos veces.

       Las  versiones  recientes  de  libc  de  Linux (posteriores a la 5.4.23) y de GNU libc (2.x) incluyen una
       implementación de  malloc  que  se  puede  ajustar  mediante  variables  de  entorno.  Cuando  se  define
       MALLOC_CHECK_,  se  usa  una  implementación  especial  (menos  eficiente) que está diseñada para tolerar
       errores simples, tales como una llamada doble a free() con el mismo argumento o sobrepasar un  límite  en
       un  byte  (fallos  "fuera  por  poco" o de desbordamiento).  No obstante, no es posible protegerse contra
       todos los errores y se pueden producir pérdidas de memoria.  Si se asigna a  MALLOC_CHECK_  el  valor  0,
       cualquier  corrupción  de memoria montón detectada se ignora silenciosamente; si se le asigna el valor 1,
       se imprime un diagnóstico en la salida estándar de error (stderr); si se le asigna el valor 2,  se  llama
       inmediatamente  a abort().  Esto es útil porque, en caso contrario, se puede producir una caída mucho más
       tarde y entonces es mucho más difícil buscar y encontrar la causa real del problema.

       Linux sigue una estrategia de asignación de  memoria  optimista.   Ésto  significa  que  cuando  malloc()
       devuelve  un  valor distinto de NULL no hay garantía de que la memoria esté realmente disponible. En caso
       de el sistema se haya quedado sin memoria, uno o más procesos serán matados por el infame asesino 00M.