cx_array_list *list = cxCalloc(allocator, 1, sizeof(cx_array_list));
if (list == NULL) return NULL;
- list->data = cxCalloc(allocator, initial_capacity, item_size);
- if (list->data == NULL) {
- cxFree(allocator, list);
- return NULL;
- }
-
list->base.cl = &cx_array_list_class;
list->base.allocator = allocator;
list->base.cmpfunc = comparator;
if (item_size > 0) {
list->base.itemsize = item_size;
} else {
+ item_size = sizeof(void*);
cxListStorePointers((CxList *) list);
}
+ // allocate the array after the real item_size is known
+ list->data = cxCalloc(allocator, initial_capacity, item_size);
+ if (list->data == NULL) {
+ cxFree(allocator, list);
+ return NULL;
+ }
+
// configure the reallocator
list->reallocator.realloc = cx_arl_realloc;
list->reallocator.ptr1 = (void *) allocator;