From e6b68924c97ffefa66c7d09a4938d7de37600475 Mon Sep 17 00:00:00 2001 From: nocturn9x Date: Wed, 5 May 2021 22:23:41 +0200 Subject: [PATCH] Fixed reallocate() again + added FREE macro --- src/main.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main.c b/src/main.c index 50a201e..3b244e8 100755 --- a/src/main.c +++ b/src/main.c @@ -10,6 +10,7 @@ the standard input file and print it reversed on the standard output file. */ #define INIT_SIZE 8 #define NEW(kind, size) (kind*)reallocate(0, sizeof(kind) * size, NULL) #define RESIZE(kind, ptr, o, n) (kind*)reallocate(sizeof(kind) * o, sizeof(kind) * n, ptr) +#define FREE(kind, size, ptr) reallocate(sizeof(kind) * size, 0, ptr) // Since uint_t does not work on Windows, we have to hack support for it somehow #if defined(_WIN16) || defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__) || defined(__WINDOWS__) || defined(__TOS_WIN__) @@ -26,7 +27,7 @@ void* reallocate(uint_t oldsize, uint_t newsize, void* ptr) { if (oldsize == 0 && ptr == NULL) { // Allocate from 0 to newsize return malloc(newsize); } - else if (oldsize > 0 && ptr != NULL) { // Free object (shrink to 0) + else if (newsize == 0 && ptr != NULL) { // Free object (shrink to 0) free(ptr); return NULL; } @@ -107,6 +108,6 @@ int main(int argc, char* argv[]) { } printf("The reverse of '%s' is '%s'\n", buffer, reversed); printf("Length of strings is %lu bytes\n", strlen(buffer)); - free(buffer); - free(reversed); + FREE(char, strlen(buffer), buffer); + FREE(char, strlen(reversed), reversed); }