Lección 23: calloc, realloc y arreglos dinámicos
La lección pasada conocimos malloc — que asigna un bloque pero deja basura adentro. calloc(n, size) va un paso más allá: asigna Y pone en cero cada byte. realloc(p, new_size) cambia el tamaño de un bloque existente — agrandándolo o achicándolo — pero cuidado: puede mover el bloque a una nueva direcc
realloc es como mudarte a un depósito más grande: la empresa de mudanzas puede reubicar todas tus pertenencias a una nueva unidad en otro lugar y entregarte una llave nueva. Nunca tires la llave vieja antes de tener la nueva en la mano — si no, si la mudanza falla, también perdiste la unidad vieja.
- calloc(n, size)
- Asigna un bloque para n elementos de size bytes cada uno — y también pone en cero cada byte.
- realloc(p, new_size)
- Cambia el tamaño de un bloque existente. Los valores se preservan, pero el bloque puede moverse a una nueva dirección.
- puntero temporal (tmp)
- El patrón seguro: int *tmp = realloc(arr, ...); y solo si tmp no es NULL — arr = tmp;. Así el bloque original no se pierde si falla.
- capacidad
- Cuántos elementos puede contener el bloque. En un arreglo dinámico, cuando se acaba la capacidad — la convención es duplicarla con realloc.
- arreglo dinámico
- Un arreglo en el heap cuyo tamaño se fija en tiempo de ejecución y puede crecer según la demanda — a diferencia de un arreglo normal de tamaño fijo.