Mercurial
diff dowa/d_memory.c @ 87:d39e8860a361
[Dowa] There was alignment issues rea
hash key
| author | June Park <parkjune1995@gmail.com> |
|---|---|
| date | Thu, 01 Jan 2026 14:25:17 -0800 |
| parents | 4532ce6d9eb8 |
| children | 655ea0b661fd |
line wrap: on
line diff
--- a/dowa/d_memory.c Thu Jan 01 14:05:34 2026 -0800 +++ b/dowa/d_memory.c Thu Jan 01 14:25:17 2026 -0800 @@ -109,14 +109,19 @@ current_capacity = 0; } - if (current_capacity >= minimum_capacity && p_array != NULL) + // Calculate needed capacity: if minimum_capacity is 0, we need room for at least one more element + size_t needed_capacity = minimum_capacity; + if (p_array && needed_capacity == 0) + needed_capacity = p_header->length + 1; + + if (current_capacity >= needed_capacity && p_array != NULL) return p_array; new_capacity = current_capacity * 2; if (new_capacity < 4) new_capacity = 4; - if (new_capacity < minimum_capacity) - new_capacity = minimum_capacity; + if (new_capacity < needed_capacity) + new_capacity = needed_capacity; size_t total_size = sizeof(Dowa_Array_Header) + (element_size * new_capacity); @@ -479,7 +484,8 @@ memcpy(p_key_copy, p_key, key_size); - memcpy(p_new_element, &p_key_copy, sizeof(char*)); + // Store the pointer value (use memcpy to avoid alignment issues) + memcpy(p_new_element, &p_key_copy, sizeof(p_key_copy)); p_header->length++; // Try to insert into hash table - if it fails, rehash and retry @@ -497,7 +503,7 @@ // Restore array state new_index = (uint32)p_header->length; p_new_element = (char*)p_map + (new_index * element_size); - memcpy(p_new_element, &p_key_copy, sizeof(char*)); + memcpy(p_new_element, &p_key_copy, sizeof(p_key_copy)); p_header->length++; }