fixed memory issues
This commit is contained in:
@@ -30,17 +30,22 @@
|
||||
u32 max_len = ALIGN_TO(initial_len, sizeof(void*)/sizeof(T));\
|
||||
/* branchless version of max(max_len, __List_min_size) */\
|
||||
max_len += (max_len < __List_min_size) * (__List_min_size - max_len);\
|
||||
return List_##T##_construct((T*)malloc(initial_len * sizeof(T)), 0, max_len);\
|
||||
return List_##T##_construct((T*)malloc(max_len * sizeof(T)), 0, max_len);\
|
||||
}\
|
||||
\
|
||||
T* List_##T##_expand(List_##T* ptr, u32 count){\
|
||||
u32 occupied_len = ptr->len;\
|
||||
u32 expanded_max_len = ptr->max_len;\
|
||||
expanded_max_len += (expanded_max_len < __List_min_size) * (__List_min_size - expanded_max_len);\
|
||||
ptr->len += count;\
|
||||
while(ptr->len > ptr->max_len){\
|
||||
while(ptr->len > expanded_max_len){\
|
||||
expanded_max_len *= 2;\
|
||||
}\
|
||||
ptr->data = (T*)realloc(ptr->data, expanded_max_len * sizeof(T));\
|
||||
u32 alloc_size = expanded_max_len * sizeof(T);\
|
||||
if(ptr->data == NULL)\
|
||||
ptr->data = (T*)malloc(alloc_size);\
|
||||
else ptr->data = (T*)realloc(ptr->data, alloc_size);\
|
||||
ptr->max_len = expanded_max_len;\
|
||||
return ptr->data + occupied_len;\
|
||||
}\
|
||||
\
|
||||
|
||||
Reference in New Issue
Block a user