Fixes to mymalloc functions

This commit is contained in:
luigoalma 2020-01-22 20:40:17 +00:00 committed by Wolfvak
parent 130ff694e2
commit 2760bb4a38

View File

@ -4,6 +4,7 @@
static size_t total_allocated = 0; static size_t total_allocated = 0;
void* my_malloc(size_t size) { void* my_malloc(size_t size) {
if (!size) return NULL; // nothing, return nothing
void* ptr = (void*) malloc(sizeof(size_t) + size); void* ptr = (void*) malloc(sizeof(size_t) + size);
if (ptr) total_allocated += size; if (ptr) total_allocated += size;
if (ptr) (*(size_t*) ptr) = size; if (ptr) (*(size_t*) ptr) = size;
@ -14,7 +15,7 @@ void *my_realloc(void *ptr, size_t new_size) {
if (!ptr) if (!ptr)
return my_malloc(new_size); return my_malloc(new_size);
if (ptr && !new_size) { if (!new_size) {
my_free(ptr); my_free(ptr);
return NULL; return NULL;
} }
@ -22,11 +23,12 @@ void *my_realloc(void *ptr, size_t new_size) {
void *real_ptr = (char*)ptr - sizeof(size_t); void *real_ptr = (char*)ptr - sizeof(size_t);
size_t old_size = *(size_t*)real_ptr; size_t old_size = *(size_t*)real_ptr;
void *new_ptr = realloc(real_ptr, new_size + sizeof(size_t));
if (new_ptr) {
total_allocated -= old_size; total_allocated -= old_size;
total_allocated += new_size; total_allocated += new_size;
void *new_ptr = realloc(real_ptr, new_size + sizeof(size_t)); *(size_t*)new_ptr = new_size;
if (new_ptr) {
return (char*)new_ptr + sizeof(size_t); return (char*)new_ptr + sizeof(size_t);
} }
@ -34,6 +36,7 @@ void *my_realloc(void *ptr, size_t new_size) {
} }
void my_free(void* ptr) { void my_free(void* ptr) {
if (!ptr) return; // just like real free, dont do anything here
void* ptr_fix = (char*) ptr - sizeof(size_t); void* ptr_fix = (char*) ptr - sizeof(size_t);
total_allocated -= *(size_t*) ptr_fix; total_allocated -= *(size_t*) ptr_fix;
free(ptr_fix); free(ptr_fix);