Memoria dinámica

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.

Ejemplo

Utilice malloc para asignar dinámicamente una estructura punto