From e5eb3845eff1ea080ffdc08102f7d1a6dee1179f Mon Sep 17 00:00:00 2001 From: 3gg <3gg@shellblade.net> Date: Tue, 19 Aug 2025 18:22:34 +0200 Subject: Add tests for clearing uninitialized memory allocators --- mem/src/mem.c | 18 ++++++++++-------- mem/test/mem_test.c | 6 ++++++ 2 files changed, 16 insertions(+), 8 deletions(-) (limited to 'mem') diff --git a/mem/src/mem.c b/mem/src/mem.c index 9169a9f..70648c9 100644 --- a/mem/src/mem.c +++ b/mem/src/mem.c @@ -57,14 +57,16 @@ void mem_del_(Memory* mem) { void mem_clear_(Memory* mem) { assert(mem); - mem->num_used_blocks = 0; - mem->next_free_chunk = 0; - memset(mem->blocks, 0, mem->num_blocks * mem->block_size_bytes); - memset(mem->chunks, 0, mem->num_blocks * sizeof(Chunk)); - - // Initialize the head as one large free chunk. - Chunk* head = &mem->chunks[0]; - head->num_blocks = mem->num_blocks; + if (mem->num_blocks > 0) { + mem->num_used_blocks = 0; + mem->next_free_chunk = 0; + memset(mem->blocks, 0, mem->num_blocks * mem->block_size_bytes); + memset(mem->chunks, 0, mem->num_blocks * sizeof(Chunk)); + + // Initialize the head as one large free chunk. + Chunk* head = &mem->chunks[0]; + head->num_blocks = mem->num_blocks; + } } void* mem_alloc_(Memory* mem, size_t num_blocks) { diff --git a/mem/test/mem_test.c b/mem/test/mem_test.c index a8d482f..52ce5a9 100644 --- a/mem/test/mem_test.c +++ b/mem/test/mem_test.c @@ -32,6 +32,12 @@ TEST_CASE(mem_create_dyn) { mem_make_dyn(&mem, NUM_BLOCKS, sizeof(int)); } +// Clear an uninitialized allocator. +TEST_CASE(mem_clear_uninitialized) { + test_mem mem = {0}; + mem_clear(&mem); +} + // Allocate N chunks of 1 block each. TEST_CASE(mem_fully_allocate) { test_mem mem; -- cgit v1.2.3