bool check(const char *word)
{
int length = strlen(word);
//malloc size of char times length of word plus \0
char *lower_case = malloc(sizeof(char) * (length + 1));
lower_case[length + 1] = '\0';
//change characters to lowercase
for (int i = 0; i < length; i++)
{
lower_case[i] = tolower(word[i]);
}
//generate int hash
int index = generate_hash(lower_case);
node_ptr trav = hashtable[index];
while (trav != NULL)
{
if (strcmp(trav->word, lower_case) == 0)
{
return true;
}
trav = trav -> next;
}
free(lower_case);
return false;
}
I got 27 bytes of memory leaked from a Valgrind test; how to free it?
lower_case[length + 1] = '\0';
writes out of bounds, change to [length]
.#include <stdlib.h>
and other necessary includes.return true;
.You should be able to fix the code along the lines of this:
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <stdbool.h>
bool check (const char *word)
{
size_t length = strlen(word);
char* lower_case = malloc(length + 1);
if(lower_case == NULL)
{
return false;
}
//change characters to lowercase
for (size_t i = 0; i < length; i++)
{
lower_case[i] = tolower(word[i]);
}
lower_case[length] = '\0';
//generate int hash
int index = generate_hash(lower_case);
bool result = false;
for(const node* trav = hashtable[index]; trav!=NULL; trav=trav->next)
{
if (strcmp(trav->word, lower_case) == 0)
{
result = true;
break;
}
}
free(lower_case);
return result;
}
The type node_ptr
needs to be changed into node
without hidden pointers.