// realloc cambia el tamaño de un bloque y conserva lo que tenía.
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int *values = malloc(2 * sizeof *values);
    if (values == NULL) {
        return 1;
    }
    values[0] = 10;
    values[1] = 20;

    int *bigger = realloc(values, 4 * sizeof *values);
    if (bigger == NULL) {
        // values sigue siendo válido: su owner todavía debe liberarlo.
        free(values);
        return 1;
    }
    values = bigger;
    values[2] = 30;
    values[3] = 40;

    for (int i = 0; i < 4; i++) {
        printf("%d ", values[i]);
    }
    printf("\n");

    free(values);
    return 0;
}
