La asignación dinámica de memoria es un tema muy importante en C: permite construir estructuras de datos complejas como listas vinculadas. Asignar memoria dinámicamente nos ayuda a almacenar datos sin conocer inicialmente el tamaño de los datos en el momento en que escribimos el programa.
Para asignar dinámicamente un espacio de memoria, debemos tener un puntero listo, que almacenará la ubicación de la memoria asignada. Podemos acceder a la memoria que nos fue asignada usando ese mismo puntero, y podemos usar ese puntero para liberar la memoria que tenemos, una vez que terminemos de usarla.
Supongamos que queremos asignar dinámicamente una estructura persona que se define de la siguiente manera:
typedef struct { char * nombre; int edad; } persona;
Para asignar una nueva persona en el argumento mipersona
, usamos la siguiente sintaxis:
persona * mipersona = malloc(sizeof(persona));
Esto le dice al compilador que queremos asignar dinámicamente la memoria suficeiente para almacenar una estructura de tipo persona en la memoria, y luego devolver un puntero a los datos recién asignados.
Para acceder a los miembros de la persona, podemos usar la notación ->
:
mipersona->nombre = "John"; mipersona->edad = 27;
Una vez que hayamos terminado de usar la estructura asignada dinámicamente, podemos liberarla usando free
free(mipersona);
Se debe tener en cuenta que la función free
no elimina la variable mipersona
en sí misma, simplemente libera los datos a los que apunta. La variable mipersona
aún apunta a algún lugar de la memoria, pero después de llamar a free
ya no podemos acceder a esa área. No debemos usar ese puntero nuevamente hasta que le asignemos nuevos datos.
Utilice malloc para asignar dinámicamente una estructura punto