diff --git a/core/arena.c b/core/arena.c index 6d60eae..651ef0f 100644 --- a/core/arena.c +++ b/core/arena.c @@ -1,11 +1,12 @@ /* SPDX-License-Identifier:BSD-3-Clause */ #include "arena.h" +#include "log.h" #include - struct arena_allocator *arena_init(usize size) { - struct arena_allocator *allocator = (struct arena_allocator *)malloc(sizeof(struct arena_allocator)); + struct arena_allocator *allocator = + (struct arena_allocator *)malloc(sizeof(struct arena_allocator)); allocator->size = size; allocator->base = (usize) malloc(size); allocator->position = 0; @@ -15,6 +16,12 @@ struct arena_allocator *arena_init(usize size) void arena_deinit(struct arena_allocator *allocator) { +#ifdef DEBUG + if (!allocator) { + log_error("attempt to free NULL arena\n"); + return; + } +#endif free((void *)allocator->base); free((void *)allocator); } @@ -23,7 +30,9 @@ void *arena_alloc(struct arena_allocator *allocator, usize size) { if (allocator->position + size >= allocator->size) { allocator->size = allocator->position + size; - allocator->base = (usize) realloc((void *)allocator->base, allocator->size + allocator->size / 2); + allocator->base = + (usize) realloc((void *)allocator->base, + allocator->size + allocator->size / 2); } void *ptr = (void *)(allocator->base + allocator->position); allocator->position += size; diff --git a/core/vector.c b/core/vector.c index 56c1ca5..c458b64 100644 --- a/core/vector.c +++ b/core/vector.c @@ -22,13 +22,21 @@ void *vector_shrink(struct vector *vector, usize element_size) vector->length -= 1; if (vector->length <= vector->size / 3) { vector->size = vector->length + vector->length / 2; - vector->data = realloc(vector->data, vector->size * element_size + 1); + vector->data = + realloc(vector->data, vector->size * element_size + 1); } return vector->data; } void vector_deinit(struct vector *vector) { +#ifdef DEBUG + if (!vector) { + log_error("attempt to free NULL vector"); + return; + } +#endif + free(vector->data); free(vector); }