// El owner como convención: nada en el tipo obliga a llamar a int_array_free.
#include <stdio.h>
#include <stdlib.h>

struct int_array {
    int *data;
    size_t size;
};

struct int_array int_array_new(size_t size) {
    struct int_array array;
    array.data = calloc(size, sizeof *array.data);
    array.size = array.data == NULL ? 0 : size;
    return array;
}

void int_array_free(struct int_array *array) {
    free(array->data);
    array->data = NULL;
    array->size = 0;
}

int main(void) {
    struct int_array numbers = int_array_new(4);
    if (numbers.data == NULL) {
        return 1;
    }
    numbers.data[0] = 7;
    printf("%d\n", numbers.data[0]);
    int_array_free(&numbers);
    return 0;
}
