Provided by:
manpages-es_1.55-10_all 
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.