feat(debug): add NULL check in arena and vector deinit functions in debug builds

Signed-off-by: Lorenzo Torres <lorenzo@sagittarius-a.org>
This commit is contained in:
h3llll 2025-11-05 04:25:29 +02:00 committed by Lorenzo Torres
parent 97d61eac5a
commit a56ebaf19c
2 changed files with 21 additions and 4 deletions

View file

@ -1,11 +1,12 @@
/* SPDX-License-Identifier:BSD-3-Clause */
#include "arena.h"
#include "log.h"
#include <stdlib.h>
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;

View file

@ -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);
}