Hay tres formas de reservar espacio de memoria para
el almacenamiento de información:
Uso de variables globales – el marcador de posición existe mientras
el programa está en marcha.
Uso de variables locales – el marcador de posición sólo existe
mientras la función que declaró la variable está siendo
ejecutado.
Reservar un espacio de memoria de forma dinámica: solicitar el
sistema, en tiempo de ejecución, un espacio de un
cierto tamaño.
malloc() // função básica para alocar memória.
La función malloc:
- Recibe como parámetro el número de bytes que desea asignar.
- Devuelve la dirección inicial del área de memoria asignada.
Asignación dinámica de un vector de enteros con 10 elementos, ejemplo:
int *v; v = malloc (10*4);
Si la asignación tiene éxito, ‘v’ almacenará la dirección inicial de un área continua de memoria suficiente para almacenar 10 valores enteros.
El operador sizeof(type) devuelve el número de bytes que un tipo
ocupa en memoria.
v = malloc(10*sizeof(int));
Ejemplo esquemático de lo que ocurre en la memoria:
Si no hay suficiente espacio libre para realizar la asignación,
la función malloc devuelve una dirección nula (NULL).
La liberación del espacio asignado dinámicamente se realiza mediante la función ‘free()’, que recibe como parámetro el puntero a la memoria que se desea liberar.
free(v)
OBS:
- Sólo debemos pasar a la función free una dirección de memoria que haya sido asignada dinámicamente.
- Una vez liberado el espacio de memoria asignado, ya no se puede acceder a él.
- Mientras no se utilice la función free, el espacio asignado dinámicamente seguirá siendo válido incluso después de que finalice una función determinada.