Memoria dinámica - stefano-sosac/arquitectura-de-computadoras GitHub Wiki
Nota: Antes de leer este capítulo, se recomienda revisar los capítulos de Arreglos y Punteros.
La memoria dinámica se refiere a la asignación de memoria en tiempo de ejecución, utilizando el montón (heap). Esto permite a los programas administrar la memoria que necesitan durante la ejecución y es fundamental para la creación de estructuras de datos dinámicas como listas enlazadas y árboles.
Las funciones de la biblioteca estándar de C para manejar memoria dinámica incluyen:
-
malloc
: Asigna un bloque de memoria, pero no lo inicializa. -
calloc
: Asigna un bloque de memoria para un arreglo y lo inicializa a cero. -
realloc
: Cambia el tamaño de un bloque de memoria ya asignado. -
free
: Libera un bloque de memoria asignado.
#include <stdlib.h>
int main() {
// Asignar memoria para un arreglo de cuatro enteros
int *arr = (int*)malloc(4 * sizeof(int));
if (arr != NULL) {
// Usar la memoria asignada...
free(arr); // No olvidar liberar la memoria
}
return 0;
}
#include <stdlib.h>
int main() {
// Asignar memoria para un arreglo de cuatro enteros e inicializar a cero
int *arr = (int*)calloc(4, sizeof(int));
if (arr != NULL) {
// Usar la memoria asignada...
free(arr); // No olvidar liberar la memoria
}
return 0;
}
#include <stdlib.h>
int main() {
// Asignar memoria para un arreglo de dos enteros
int *arr = (int*)malloc(2 * sizeof(int));
if (arr != NULL) {
// Cambiar el tamaño del arreglo a cuatro enteros
arr = (int*)realloc(arr, 4 * sizeof(int));
// Usar la memoria reasignada...
free(arr); // No olvidar liberar la memoria
}
return 0;
}
A continuación, se le invita a resolver la siguiente lista de ejercicios.
Implementar un programa que llene un espacio de memoria dinámico con las letras mayúsculas del alfabeto. Luego debe imprimirlas en la salida estándar en una misma línea.
Implementar un programa que calcule la longitud de una cadena de texto. Para validar el resultado de su operación puede emplear la función strlen de la librería string.h
Implemente un programa que haga lo siguiente:
- Tenga una cadena de texto.
- Revierta la cadena de texto y la almacene en memoria dinámica.
- Compare ambas cadenas de texto y diga si la cadena original es palíndroma.
Implementar un programa que divida una cadena de texto en dos cadenas. El índice en el cual se realiza la división será ingresado por línea de comandos, y el programa deberá mostrar las dos cadenas en las que se ha dividido la cadena original.
Ejemplo:
- Cadena: "Hola mundo", Índice: 4
- Primera cadena: "Hola "
- Segunda cadena: "mundo"