realloc: reallocar memoria dinámicamente
#include <stdlib.h>
void *realloc(void *ptr, size_t size);
Piensa en void *
como la dirección de cualquier tipo de valor en memoria. Piensa en size_t
como un long
.
Esta función redimensiona dinámicamente un bloque de memoria que fue devuelto por malloc
. La dirección del primer byte de este bloque es ptr
y se redimensiona para tener size
bytes contiguos, moviendo (y copiando) los bytes originales en memoria según sea necesario.
Esta función devuelve la dirección del primer byte del bloque realocado (que puede o no ser igual a ptr
) o NULL
en casos de error (como cuando no hay suficiente memoria disponible).
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *s = malloc(3);
if (s == NULL)
{
return 1;
}
s[0] = 'h';
s[1] = 'i';
s[2] = '\0';
printf("%s\n", s);
char *tmp = realloc(s, 4);
if (tmp == NULL)
{
free(s);
return 1;
}
s = tmp;
s[2] = '!';
s[3] = '\0';
printf("%s\n", s);
free(s);
return 0;
}