Menu
Coddy logo textTech

Comprobación de fallos de asignación

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

Aunque malloc() es una herramienta potente para la asignación dinámica de memoria, hay una realidad crítica que debes comprender: malloc() puede fallar. Cuando el sistema se queda sin memoria disponible, malloc() no puede cumplir tu solicitud y devuelve NULL en lugar de una dirección de memoria válida.

Esto significa que cada vez que uses malloc(), debes comprobar si tuvo éxito antes de intentar usar el puntero devuelto. Usar un puntero NULL hará que tu programa se bloquee con un error de segmentación.

int *ptr = (int*)malloc(sizeof(int));

if (ptr == NULL) {
    printf("Memory allocation failed!\n");
    return -1;  // Salir del programa o manejar el error
}

// Es seguro usar ptr aquí
*ptr = 42;

Esta comprobación de NULL no es opcional: es esencial para escribir programas robustos en C. Aunque los fallos de asignación de memoria son poco frecuentes en los sistemas modernos, pueden ocurrir, especialmente en entornos con recursos limitados o al solicitar grandes cantidades de memoria. El código C profesional siempre incluye estas comprobaciones para evitar bloqueos y proporcionar un manejo adecuado de los errores.

challenge icon

Desafío

Fácil

Escribe un programa en C que demuestre un manejo adecuado de errores al usar malloc() para la asignación dinámica de memoria. Tu programa debe:

  1. Leer un entero n del usuario que represente el número de enteros que se almacenarán
  2. Usar malloc() con sizeof() para asignar dinámicamente memoria para un arreglo de n enteros
  3. Comprobar si la asignación de memoria se realizó correctamente verificando si el puntero devuelto es NULL
  4. Si la asignación falla, imprimir Memory allocation failed! y terminar el programa
  5. Si la asignación tiene éxito, imprimir Memory allocation successful!
  6. Leer n valores enteros del usuario y almacenarlos en el arreglo asignado
  7. Calcular e imprimir la suma de todos los valores con el formato: Sum: [value]
  8. Imprimir el total de bytes asignados con el formato: Bytes allocated: [value]

Recuerda incluir el encabezado <stdlib.h> para usar malloc(). Tu programa debe demostrar la práctica esencial de comprobar si la asignación falla antes de intentar usar la memoria asignada.

Por ejemplo, si la entrada es:

4
10 20 30 40

La salida debe ser:

Memory allocation successful!
Sum: 100
Bytes allocated: 16

Este desafío enfatiza la importancia fundamental de la programación defensiva al trabajar con asignación dinámica de memoria, garantizando que tus programas gestionen correctamente los posibles fallos de asignación de memoria en lugar de bloquearse inesperadamente.

Pruébalo tú mismo

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

int main() {
    // Lee el número de enteros
    int n;
    scanf("%d", &n);
    
    // TODO: Escribe tu código aquí
    // - Usa malloc() para asignar memoria para n enteros
    // - Comprueba si la asignación fue exitosa
    // - Maneja tanto los casos de éxito como de fallo
    // - Lee los enteros y almacénalos
    // - Calculate the sum and bytes allocated
    
    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