![]() |
![]() |
8.3) Asignación dinámica de
memoria.
|
Otra de las grandes ventajas de la utilización de punteros
es la posibilidad de realizar una asiganació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:
![]() |
![]() |
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: |
![]() |
![]() |
![]() |
num_elementos hace referencia al número de datos que se quiere resevar. |
![]() |
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:
main() {
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.
NOTA: No os preocupeis si os parece muy abstracto el concepto de la reserva de memoria, porque en posteriores apartados lo vereis mucho más claro. |