Menu
Coddy logo textTech

Liberación de memoria con free()

Parte de la sección Lógica y Flujo del Journey de C de Coddy. Lección 35 de 63.

Cuando asignas memoria dinámicamente usando malloc(), esa memoria permanece asignada hasta que la liberas explícitamente. La función free() es tu herramienta para devolver al sistema la memoria asignada dinámicamente cuando terminas de usarla.

La función free() toma un argumento: un puntero al bloque de memoria que quieres liberar. Este debe ser el mismo puntero que devolvió malloc() (o funciones relacionadas como calloc()).

#include <stdlib.h>

int *ptr = (int*)malloc(sizeof(int));  // Asignar memoria
*ptr = 42;  // Usar la memoria
free(ptr);  // Liberar la memoria cuando se termine

No llamar a free() crea lo que se conoce como una fuga de memoria. La memoria asignada permanece reservada por tu programa aunque ya no la estés utilizando. En programas de larga duración o en programas que asignan memoria repetidamente, estas fugas pueden consumir toda la memoria disponible del sistema y causar problemas de rendimiento o bloqueos.

Recuerda: cada malloc() debería tener un free() correspondiente. Esta correspondencia es esencial para una gestión responsable de la memoria en la programación en C.

challenge icon

Desafío

Fácil

Escribe un programa en C que demuestre el ciclo de vida completo de la asignación y liberación de memoria dinámica. Tu programa debe:

  1. Leer un entero count del usuario que represente cuántos enteros se almacenarán
  2. Usar malloc() con sizeof() para asignar dinámicamente memoria para un arreglo de count enteros
  3. Comprobar si la asignación de memoria fue exitosa; si falla, imprimir Memory allocation failed! y terminar el programa
  4. Si la asignación tiene éxito, imprimir Memory allocated successfully!
  5. Leer count valores enteros del usuario y almacenarlos en el arreglo asignado
  6. Calcular e imprimir la suma de todos los valores con el formato: Sum: [value]
  7. Encontrar e imprimir el valor máximo con el formato: Maximum: [value]
  8. Usar free() para liberar la memoria
  9. Imprimir Memory freed successfully! para confirmar la limpieza

Recuerda incluir el encabezado <stdlib.h> para usar malloc() y free(). Este desafío demuestra la combinación esencial de malloc() y free() para evitar fugas de memoria en tus programas.

Por ejemplo, si la entrada es:

4
15 8 23 12

Tu salida debería ser:

Memory allocated successfully!
Sum: 58
Maximum: 23
Memory freed successfully!

Este desafío refuerza el concepto fundamental de que cada bloque de memoria asignado dinámicamente debe liberarse correctamente cuando ya no se necesite, completando el ciclo responsable de gestión de memoria en la programación en C.

Pruébalo tú mismo

#include <stdio.h>
#include <stdlib.h>

int main() {
    int count;
    
    // Lee el número de enteros a almacenar
    scanf("%d", &count);
    
    // TODO: Escribe tu código debajo
    // 1. Asigna memoria usando malloc() con sizeof()
    // 2. Comprueba si la asignación fue exitosa
    // 3. Lee los valores enteros y almacénalos
    // 4. Calcula la suma y encuentra el máximo
    // 5. Libera la memoria asignada
    
    return 0;
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo

Practica por tu cuenta: Compilador de C online