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

NOMBRE

       calloc, malloc, free, realloc - Asignar y liberar memoria dinamica

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'ON

       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
       operacion.

       realloc() cambia el tamano del bloque de memoria  apuntado  por  ptr  a
       size  bytes.  El contenido permanecera inalterado hasta el minimo entre
       el tamano viejo y el nuevo; la  memoria  recien  asignada  quedara  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  esta  convenientemente  alineada para cualquier tipo de
       variable, o NULL si la peticion falla.

       free() no devuelve ningun valor.

       realloc() devuelve un puntero a la memoria recien  asignada,  que  esta
       convenientemente preparada para cualquier tipo de variable y podria ser
       diferente de ptr, o NULL si la peticion 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'EASE TAMBI'EN

       brk(2), posix_memalign(3)

OBSERVACIONES

       El  estandar 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
       implementacion 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  caidas  de  malloc(),  free()  o  realloc()  casi  siempre   estan
       relacionadas con la corrupcion de la memoria monton (heap), tal como el
       desbordamiento de una porcion de memoria reservada o la liberacion  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  implementacion  de  malloc  que  se  puede
       ajustar  mediante variables de entorno. Cuando se define MALLOC_CHECK_,
       se usa una implementacion especial (menos eficiente) que esta  disenada
       para tolerar errores simples, tales como una llamada doble a free() con
       el mismo argumento o sobrepasar un limite en un byte (fallos "fuera por
       poco"  o  de  desbordamiento).   No  obstante, no es posible protegerse
       contra todos los errores y se pueden producir perdidas de memoria.   Si
       se  asigna  a MALLOC_CHECK_ el valor 0, cualquier corrupcion de memoria
       monton detectada se ignora silenciosamente; si se le asigna el valor 1,
       se  imprime  un diagnostico en la salida estandar de error (stderr); si
       se le asigna el valor 2, se llama inmediatamente a  abort().   Esto  es
       util  porque,  en caso contrario, se puede producir una caida mucho mas
       tarde y entonces es mucho mas dificil buscar y encontrar la causa  real
       del problema.

       Linux  sigue  una  estrategia de asignacion de memoria optimista.  Esto
       significa que cuando malloc() devuelve un valor distinto de NULL no hay
       garantia  de  que  la  memoria este realmente disponible. En caso de el
       sistema se haya quedado sin memoria, uno o mas procesos  seran  matados
       por el infame asesino 00M.