Menu
Coddy logo textTech

Liberación de memoria con free()

Parte de la sección Logic & Flow 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 la memoria asignada dinámicamente al sistema cuando hayas terminado de usarla.

La función free() toma un argumento: un puntero al bloque de memoria que deseas liberar. Este debe ser el mismo puntero que fue devuelto por 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 al terminar

No llamar a free() crea lo que se conoce como una fuga de memoria. La memoria asignada permanece reservada por su programa aunque ya no la esté utilizando. En programas de larga ejecución o 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() debe tener un free() correspondiente. Este emparejamiento es esencial para una gestión de memoria responsable 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 dinámica de memoria. Tu programa debe:

  1. Leer un entero count del usuario que represente cuántos enteros se van a almacenar
  2. Usar malloc() con sizeof() para asignar dinámicamente memoria para un arreglo de count enteros
  3. Verificar 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 en el formato: Sum: [value]
  7. Encontrar e imprimir el valor máximo en 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 el emparejamiento esencial de malloc() y free() para prevenir 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 crítico de que cada bloque de memoria asignado dinámicamente debe ser liberado adecuadamente cuando ya no sea necesario, completando el ciclo responsable de gestión de memoria en la programación en C.

Hoja de referencia

Usa free() para liberar la memoria que fue asignada con malloc():

#include <stdlib.h>

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

Cada malloc() debe tener un free() correspondiente para prevenir fugas de memoria. El puntero pasado a free() debe ser el mismo puntero devuelto por malloc().

Pruébalo tú mismo

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

int main() {
    int count;
    
    // Leer el número de enteros a almacenar
    scanf("%d", &count);
    
    // TODO: Escribe tu código a continuación
    // 1. Asignar memoria usando malloc() con sizeof()
    // 2. Verificar si la asignación fue exitosa
    // 3. Leer los valores enteros y almacenarlos
    // 4. Calcular la suma y encontrar el máximo
    // 5. Liberar 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 Logic & Flow