From 90c869857b55782d4d6b21434a58da4d2f9e6be3 Mon Sep 17 00:00:00 2001 From: Daniel Santos Date: Sat, 12 Mar 2022 13:21:39 +0000 Subject: free memory * add mem rule to Makefile * add free_numeral() * free all memory allocations Signed-off-by: Daniel Santos --- Makefile | 3 +++ numericx.c | 28 +++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 4943dd3..d923716 100644 --- a/Makefile +++ b/Makefile @@ -55,3 +55,6 @@ clean: run: decimal-earth ./decimal-earth 21 +mem: decimal-earth + valgrind --leak-check=full --show-leak-kinds=all -s decimal-earth 999 + diff --git a/numericx.c b/numericx.c index d12fc87..2870b13 100644 --- a/numericx.c +++ b/numericx.c @@ -177,7 +177,8 @@ reverse_string(char* string) } } -bool is_valid_number(char* numeral_system, char *number) +bool +is_valid_number(char* numeral_system, char *number) { /* if( *number == '-' || *number == '+' ) @@ -193,6 +194,19 @@ bool is_valid_number(char* numeral_system, char *number) return true; } +void +free_numeral(numeral_ptr* numeral) +{ + numeral_ptr* tmp = NULL; + + while( !(numeral == NULL) ) + { + tmp = numeral->next; + free(numeral); + numeral = tmp; + } +} + int main(int argc, char* argv[]) { @@ -218,6 +232,8 @@ main(int argc, char* argv[]) /* Check if number belongs to it's numerical system */ if( !is_valid_number(from, number) ) { + free(from); + free(to); fprintf(stderr, "error: %s.\n", strerror(EDOM)); exit(EDOM); } @@ -252,6 +268,10 @@ main(int argc, char* argv[]) { if( strlen(number) == 1 && *number == *from_first ) { + free(from); + free(to); + free_numeral(counting); + free_numeral(result); fprintf(stderr, "error: unrepresentable void number\n"); exit(EXIT_FAILURE); } @@ -295,5 +315,11 @@ main(int argc, char* argv[]) print_numeral(result); printf("\n"); + /* free memory */ + free(from); + free(to); + free_numeral(counting); + free_numeral(result); + return EXIT_SUCCESS; } -- cgit 1.4.1-2-gfad0