libqb  1.0.3
Array

This is a dynamic array (it can grow, but without moving memory).

arr = qb_array_create_2(64, sizeof(struct my_struct), 256);
...
res = qb_array_index(arr, idx, (void**)&my_ptr);
if (res < 0) {
return res;
}
// use my_ptr, now even if there is a grow, this pointer will be valid.
int32_t qb_array_index(qb_array_t *a, int32_t idx, void **element_out)
Get an element at a particular index.
qb_array_t * qb_array_create_2(size_t max_elements, size_t element_size, size_t autogrow_elements)
Create an array with fixed sized elements.

Currently, this dynamic array abstract data type can accommodate only 2^(* QB_ARRAY_MAX_INDEX_BITS) elements, and with standard zero-based indexing, this gives a valid index range [0, QB_ARRAY_MAX_ELEMENTS), where the notation denotes the beginning of the interval is included and the end is excluded. In other words, client space shall avoid a pitfall of relying solely on the type of @max_elements parameter to qb_array_create and/or of @idx parameter to qb_array_index (these types conflict, anyway).

See also
qbarray.h