Inicio / Wikis / Tutoriales / Asignación dinámica de memoria y Estructuras dinámicas - Uso de malloc, sizeof y free

Asignación dinámica de memoria y Estructuras dinámicas - Uso de malloc, sizeof y free

(2 opiniones)
Tutorial creado por unixOZ. Extraido de: http://www.tux.cl/articulos.php?id=18
08 de Febrero de 2005
Lenguaje C

1 - Uso de malloc, sizeof y free

La función malloc es empleada comúnmente para intentar “tomar una porción contigua de memoria. Esta definida como:

void *malloc(size_t size);

Lo anterior indica que regresará un apuntador del tipo void *, el cual es el inicio en memoria de la porción reservada de tamaño size. Si no puede reservar esa cantidad de memoria la función regresa un apuntador nulo o NULL

Dado que void * es regresado, C asume que el apuntador puede ser convertido a cualquier tipo. El tipo de argumento size_t esta definido en la cabecera stddef.h y es un tipo entero sin signo. Por lo tanto:

char *cp;cp = (char *) malloc(100);
intenta obtener 100 bytes y asignarlos a la dirección de inicio a cp.

Es usual usar la función sizeof() para indicar el número de bytes, por ejemplo:

int *ip;ip = (int *) malloc(100 * sizeof(int) );

El compilador de C requiere hacer una conversión del tipo. La forma de lograr la coerción (cast) es usando (char *) y (int *), que permite convertir un apuntador void a un apuntador tipo char e int respectivamente. Hacer la conversión al tipo de apuntador correcto asegura que la aritmética con el apuntador funcionará de forma correcta.

Es una buena práctica usar sizeof() aún si se conoce el tamaño actual del dato que se requiere, -- ya que de esta forma el código se hace independiente del dispositivo (portabilidad).

La función sizeof() puede ser usada para encontrar el tamaño de cualquier tipo de dato, variable o estructura. Simplemente se debe proporcionar uno de los anteriores como argumento a la función.

Por lo tanto:

int i;struct COORD {float x,y,z};struct COORD *pt;sizeof(int), sizeof(i), sizeof(struct COORD) ysizeof(PT) son tambien sentencias correctas.
En el siguiente ejemplo se reserva memoria para la variable ip, en donde se emplea la relación que existe entre apuntadores y arreglos, para manejar la memoria reservada como un arreglo. Por ejemplo, se pueden hacer cosas como:

main(){ int *ip, i; ip = (int *) malloc(100 * sizeof(int) ); ip[0] = 1000; for (i=0; i<100; ++i)

Cuando se ha terminado de usar una porción de memoria siempre se deberá liberar usando la función free(). Esta función permite que la memoria liberada este disponible nuevemente quizás para otra llamada de la función malloc()

La función free() toma un apuntador como un argumento y libera la memoria a la cual el apuntador hace referencia. scanf("%d",ip++);}
Valora este capítulo: (2 opiniones)
Autor y licencia de 'Asignación dinámica de memoria y Estructuras dinámicas - Uso de malloc, sizeof y free'
unixOZ Extraído de: http://www.tux.cl/articulos.php?id=18 CopyLeft
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.

Opiniona sobre 'Asignación dinámica de memoria y Estructuras dinámicas - Uso de malloc, sizeof y free' (2)

Tu nombre debe tener tres caracteres como mínimo.
Es necesario que te des de alta con una cuenta de correo válida.
Es necesario que te des de alta con una cuenta de correo válida.
El contenido del título de tu opinión debe tener tres caracteres como mínimo.
Es obligatorio que selecciones una valoración del recurso.
El contenido del comentario de tu opinión debe tener tres caracteres como mínimo.

Opina sobre este tutorial



* Valoración:
* Nombre:
* Correo electrónico:
* Título:
* Comentario:

Wikis relacionados con 'Asignación dinámica de memoria y Estructuras dinámicas - Uso de malloc, sizeof y free'

Si es correcta la sentencia con la cual Nietzsche afirma que “Todo lo que es... Más »
El desarrollo informático ha permitido la popularización de un término: "realidad virtual". De los programas... Más »
Como es sabido, el concepto de función metalingüística y su ámbito de aplicación han quedado... Más »
En No sólo el fuego se pueden notar cambios que hacen que Prado quedara fuera... Más »
Manual Compacto para nuevos usuarios.
¿Estás seguro de que deseas eliminar este capítulo?