malloc y realloc en C: ejercicio resuelto
Si buscas malloc y realloc en C ejercicio resuelto, aquí tienes un ejemplo típico de array dinámico con crecimiento por capacidad.
Enunciado
Implementa un array dinámico de enteros en C que:
- empiece con capacidad 4,
- inserte 8 valores,
- duplique capacidad con
realloccuando se quede sin espacio.
Solución en C
#include <stdio.h>
#include <stdlib.h>
int main(void) {
size_t cap = 4;
size_t n = 0;
int *v = malloc(cap * sizeof(int));
if (!v) return 1;
for (int x = 10; x <= 80; x += 10) {
if (n == cap) {
cap *= 2;
int *tmp = realloc(v, cap * sizeof(int));
if (!tmp) {
free(v);
return 1;
}
v = tmp;
}
v[n++] = x;
}
printf("Tamano: %zu | Capacidad: %zu\n", n, cap);
for (size_t i = 0; i < n; i++) printf("%d ", v[i]);
printf("\n");
free(v);
return 0;
}Salida esperada
Tamano: 8 | Capacidad: 8
10 20 30 40 50 60 70 80Errores frecuentes
- Sobrescribir el puntero original con
reallocsin usar puntero temporal. - No comprobar
NULLenmallocyrealloc. - Olvidar
freeal final.
Aplicación práctica
Este patrón se usa en listas dinámicas, buffers y estructuras de datos que crecen en tiempo de ejecución.
Siguiente ejercicio recomendado
- malloc y free en C: ejercicios resueltos
- Punteros en C: ejercicios resueltos
- Struct en C: ejercicio resuelto
Práctica guiada y libro completo
Si quieres una ruta completa con progresión real de dificultad:
FAQ
¿Cuándo usar realloc en C?
Cuando necesitas redimensionar memoria ya reservada sin copiar manualmente bloque a bloque.
¿Es seguro hacer v = realloc(v, ...) directamente?
No es lo ideal. Usa un temporal para no perder la referencia original si falla.
¿Qué estrategia de crecimiento conviene?
Duplicar capacidad suele ser una estrategia práctica y eficiente para inserciones sucesivas.