Realloc y calloc
14 04 2008
Como ya habiamos comentado en un anterior post sobre la asignación de memoria dinámica además de malloc que asigna un zona de memoria para nuestra programa tanto realloc como calloc hacen exactamente lo mismo pero además tienen capacidades adicionales (que las hacen maś caras computacionalmente hablando, así que si no necesitas ninguna de estas características utliliza directamente malloc. Sino estarás malgastando recursos).
La función calloc cuya firma o prototipo es la siguiente:
void* calloc(size_t nmemb, size_t size);
Inicializa la zona de memoria reservada. Como se puede observar sus argumentos son diferentes de las de la función malloc que sólo recibía el número de bytes a reservar. Para calloc es necesario dar el número de elementos a reservar y el tamaño de cada uno de esos elementos. Así tenemos que por ejemplo:
int* pi;
pi = calloc(50,sizeof(int));
Reservará espacio para 50 enteros asignando al puntero pi la dirección en memoria del primero.
La función realloc por otra parte intenta cambiar el tamaño de una zona de memoria previamente asignada dinamicamente copiando, si es posible, su contenido anterior.
Esta es su firma:
void* realloc(void* ptr, size_t size);
Si el cambio de tamaño no se puede llevar a cabo entonces la función devolverá un puntero a null
ip = (int* ) realloc ( ip, 25*sizeof(int) );
Siguiendo el primer ejemplo este redimensionará la zona de memoria asignada por la función calloc. Debemos tener en cuenta que esta función puede modificar además el valor del puntero. Recolocando la zona de memoria reservada en otra zona de la memoria de la máquina dependiendo de la situación. Incluso una disminución en el tamaño de la memoria puede dar lugar a una recolocación del segmento de memoria.
Como con malloc y calloc toda memoria reservada dinámicamente debe ser liberada con free.
void free(void* ptr);
Comentarios :
No hay comentarios »
La función calloc cuya firma o prototipo es la siguiente:
void* calloc(size_t nmemb, size_t size);
Inicializa la zona de memoria reservada. Como se puede observar sus argumentos son diferentes de las de la función malloc que sólo recibía el número de bytes a reservar. Para calloc es necesario dar el número de elementos a reservar y el tamaño de cada uno de esos elementos. Así tenemos que por ejemplo:
int* pi;
pi = calloc(50,sizeof(int));
Reservará espacio para 50 enteros asignando al puntero pi la dirección en memoria del primero.
La función realloc por otra parte intenta cambiar el tamaño de una zona de memoria previamente asignada dinamicamente copiando, si es posible, su contenido anterior.
Esta es su firma:
void* realloc(void* ptr, size_t size);
Si el cambio de tamaño no se puede llevar a cabo entonces la función devolverá un puntero a null
ip = (int* ) realloc ( ip, 25*sizeof(int) );
Siguiendo el primer ejemplo este redimensionará la zona de memoria asignada por la función calloc. Debemos tener en cuenta que esta función puede modificar además el valor del puntero. Recolocando la zona de memoria reservada en otra zona de la memoria de la máquina dependiendo de la situación. Incluso una disminución en el tamaño de la memoria puede dar lugar a una recolocación del segmento de memoria.
Como con malloc y calloc toda memoria reservada dinámicamente debe ser liberada con free.
void free(void* ptr);
Categorías : Programación
Referencias : No hay referencias »



Referencias
No hay referencias