fix: minor memory cleanup
This commit is contained in:
parent
9aee9fe970
commit
d3cb7d1b21
|
@ -12,6 +12,8 @@
|
|||
|
||||
#include "named_array.h"
|
||||
|
||||
#define assert__(x) for ( ; !(x) ; assert(x) )
|
||||
|
||||
void named_array_init(NamedArray* array, unsigned int element_size, unsigned int max_elements) {
|
||||
array->element_size = element_size;
|
||||
array->max_element_count = max_elements;
|
||||
|
@ -28,6 +30,7 @@ void named_array_init(NamedArray* array, unsigned int element_size, unsigned int
|
|||
array->used_markers = (unsigned char*) malloc(array->marker_count);
|
||||
#endif
|
||||
memset(array->used_markers, 0, sizeof(unsigned char) * array->marker_count);
|
||||
memset(array->elements, 0, element_size * max_elements);
|
||||
}
|
||||
|
||||
char named_array_used(NamedArray* array, unsigned int id) {
|
||||
|
@ -56,6 +59,17 @@ void* named_array_alloc(NamedArray* array, unsigned int* new_id) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
#define BYTE_TO_BINARY_PATTERN "%c%c%c%c%c%c%c%c"
|
||||
#define BYTE_TO_BINARY(byte) \
|
||||
(byte & 0x80 ? '1' : '0'), \
|
||||
(byte & 0x40 ? '1' : '0'), \
|
||||
(byte & 0x20 ? '1' : '0'), \
|
||||
(byte & 0x10 ? '1' : '0'), \
|
||||
(byte & 0x08 ? '1' : '0'), \
|
||||
(byte & 0x04 ? '1' : '0'), \
|
||||
(byte & 0x02 ? '1' : '0'), \
|
||||
(byte & 0x01 ? '1' : '0')
|
||||
|
||||
void* named_array_reserve(NamedArray* array, unsigned int id) {
|
||||
if(!named_array_used(array, id)) {
|
||||
unsigned int j = (id % 8);
|
||||
|
@ -63,6 +77,11 @@ void* named_array_reserve(NamedArray* array, unsigned int id) {
|
|||
|
||||
assert(!named_array_used(array, id));
|
||||
array->used_markers[i] |= (unsigned char) 1 << j;
|
||||
|
||||
assert__(named_array_used(array, id)) {
|
||||
printf("%s: id %d is not used in [%d,%d] = "BYTE_TO_BINARY_PATTERN"\n",__func__,id,i,j, BYTE_TO_BINARY(array->used_markers[i]));
|
||||
}
|
||||
|
||||
assert(named_array_used(array, id));
|
||||
|
||||
unsigned char* ptr = &array->elements[id * array->element_size];
|
||||
|
|
Loading…
Reference in New Issue
Block a user