int* evens(int a[], unsigned int alen, unsigned int* outlen) {
    unsigned int i, j, nevens = 0;

    for (i = 0; i < alen; i++) {
        if (a[i] % 2 == 0) {
            nevens++;
        }
    }

    int* res = (int*)malloc(sizeof(int) * nevens);
    // (check if res is NULL and raise error)
    *outlen = nevens;

    j = 0;
    for (i = 0; i < alen; i++) {
        if (a[i] % 2 == 0) {
            res[j++] = a[i];
        }
    }

    return res;
}

void foo() {
    int xs[] = {1, 2, 3, 4};
    int* es;
    unsigned int elen;

    es = evens(xs, 4, &elen);
    // ... (use es) ...
    free(es);
}