free memory

* add mem rule to Makefile
 * add free_numeral()
 * free all memory allocations

Signed-off-by: Daniel Santos <dacs.git@brilhante.top>
This commit is contained in:
Daniel Santos 2022-03-12 13:21:39 +00:00
parent 06bb8994d4
commit 90c869857b
2 changed files with 30 additions and 1 deletions

View File

@ -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

View File

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