# HG changeset patch # User Mike Becker # Date 1680859828 -7200 # Node ID d0680a23d8507c1f54d59d30048d2d383341ad4e # Parent 765cf785b7fad91a5067f384c8ec9929cc53182c fix initial storage allocation for array lists created with CX_STORE_POINTERS diff -r 765cf785b7fa -r d0680a23d850 src/array_list.c --- a/src/array_list.c Mon Apr 03 19:48:00 2023 +0200 +++ b/src/array_list.c Fri Apr 07 11:30:28 2023 +0200 @@ -511,12 +511,6 @@ 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; @@ -525,9 +519,17 @@ 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;