realloc seguro en C: ejercicio resuelto

realloc seguro en C: ejercicio resuelto

Este ejercicio está programado para publicación diaria y sigue la estructura estándar del sitio: enunciado, solución y resultado esperado.

Enunciado

Redimensiona dinámicamente un array y evita pérdida de memoria cuando realloc falla.

Solución en C

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int n = 4;
    int *a = (int *)malloc(n * sizeof(int));
    if (!a) return 1;

    for (int i = 0; i < n; i++) a[i] = i + 1;

    int nuevo_n = 8;
    int *tmp = (int *)realloc(a, nuevo_n * sizeof(int));
    if (!tmp) {
        free(a);
        return 1;
    }
    a = tmp;

    for (int i = n; i < nuevo_n; i++) a[i] = i + 1;
    printf("a[7] = %d\n", a[7]);

    free(a);
    return 0;
}

Resultado esperado

1
a[7] = 8

Errores frecuentes

  • Asignar realloc directamente al puntero original y perder la referencia si falla.
  • No liberar memoria en rutas de error.
  • Redimensionar sin recalcular correctamente el número de elementos.

Aplicación práctica

Usar realloc con variable temporal es el patrón seguro para redimensionar buffers dinámicos sin fugas en caso de fallo.

Siguiente ejercicio recomendado

Práctica guiada y libro completo

Si quieres una ruta completa con progresión real de dificultad:

FAQ

¿Este ejercicio sirve para entrevistas y exámenes de C?

Sí. Trabaja patrones que aparecen mucho en prácticas, entrevistas técnicas y evaluaciones de programación en C.

¿Dónde seguir con más ejercicios resueltos de C?

En Programación en C en 100 ejercicios resueltos y en Ejercicios C. Kindle Unlimited: Ver en Amazon.

¿Cómo practicar este tipo de ejercicio para mejorar más rápido?

Empieza con entradas pequeñas, prueba casos límite (vacío, un elemento y capacidad máxima) y luego reescribe la solución sin copiarla.