Aula 23: calloc, realloc e arrays dinâmicos
Na aula passada conhecemos o malloc — que aloca um bloco mas deixa lixo nele. calloc(n, size) vai um passo além: aloca E zera todos os bytes. realloc(p, new_size) redimensiona um bloco existente — aumentando ou diminuindo — mas cuidado: ela pode mover o bloco para um novo endereço, então sempre guar
realloc é como se mudar para um depósito maior: a empresa de mudanças pode realocar todos os seus pertences para uma unidade nova em outro lugar e te entregar uma chave nova. Nunca jogue fora a chave antiga antes de ter a nova na mão — senão, se a mudança falhar, você perde a unidade antiga também.
- calloc(n, size)
- Aloca um bloco para n elementos de size bytes cada — e também zera todos os bytes.
- realloc(p, new_size)
- Redimensiona um bloco existente. Os valores são preservados, mas o bloco pode mover para um novo endereço.
- ponteiro temporário (tmp)
- O padrão seguro: int *tmp = realloc(arr, ...); e só se tmp não for NULL — arr = tmp;. Assim o bloco original não se perde em caso de falha.
- capacidade
- Quantos elementos o bloco consegue conter. Num array dinâmico, quando a capacidade se esgota — a convenção é dobrá-la com realloc.
- array dinâmico
- Um array na heap cujo tamanho é definido em tempo de execução e pode crescer sob demanda — diferente de um array comum de tamanho fixo.