3.6.- ASIGNACIÓN DINÁMICA DE MEMORIA.
Otra de las grandes ventajas de la utilización de punteros es la posibilidad de realizar una asignación dinámica de memoria. Esto significa que la reserva de memoria se realiza dinámicamente en tiempo de ejecución, no siendo necesario entonces tener que especificar en la declaración de variables la cantidad de memoria que se va a requerir. La reserva de memoria dinámica añade una gran flexibilidad a los programas porque permite al programador la posibilidad de reservar la cantidad de memoria exacta en el preciso instante en el que se necesite, sin tener que realizar una reserva por exceso en prevención a la que pueda llegar a necesitar. Dado que los punteros se pueden aplicar a cualquier tipo de variable se puede entonces realizar una asignación de memoria dinámica para cualquier variable. La función malloc es la que se utiliza para realizar una reserva de memoria y se encuentra en el archivo de cabecera <stdlib.h>. La cabecera de dicha función es como sigue:
voi*malloc (numero_bytes_memoria) Ejemplo:Reserva de memoria de un dato simple:
- include<stdlib.h>
main() { int *dato_simple; dato_simple = (int *) malloc (1*sizeof(int)); }
Este trozo de código me reserva memoria para 1 dato int.
El argumento de la función malloc especifica el número de bytes de memoria que el usuario quiere reservar y devuelve la dirección de memoria de la zona de memoria reservada. Con objeto de facilitar el “cálculo del número de bytes necesarios”, el usuario puede especificar dicho número en función del tipo de dato que quiere resevar y del número de datos de dicho tipo. De este modo, la sintaxis de la función malloc quedaría: malloc(num_elementos*sizeof(tipo_dato))
• num_elementos: Hace referencia al numero de datos que se quiere reservar. • malloc y sizeof son dos palabras reservadas de C. sizeof. • tipo_dato se refiere al tipo de dato que se quiere reservar.
Ejemplo:Reserva de memoria de varios datos simples:
- include<stdlib.h>
main() { int *dato_simple; dato_simple = (int *) malloc (3*sizeof(int)); }
Este trozo de código me reserva memoria para 3 datos int.
La función malloc reserva un cantidad de memoria suficiente para almacenar num_elementos del tipo tipo_dato y devuelve la dirección de memoria de la celda del primer elemento reservado.
sizeof (tipo_dato) es una función de C que devuelve el número de bytes necesarios para reservar un dato del tipo tipo_dato