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.

Funciones de Manejo de Memoria Dinámica

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.

Ejemplos de Uso

malloc

#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;
}

calloc

#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;
}

realloc

#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;
}

Ejercicios

A continuación, se le invita a resolver la siguiente lista de ejercicios.

Ejercicio 1

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.

Ejercicio 2

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

Ejercicio 3

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.

Ejercicio 4

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"
⚠️ **GitHub.com Fallback** ⚠️