泄漏记忆功能的链接。
bool check(const char* word)
{
uint32_t len = strlen(word);
char currentWord[len+1];
for(int k = 0; k <= len; k++)
{
currentWord[k] = tolower((char)word[k]);
}
bool wordPresent = false;
uint32_t indexSize = (dict.wordCount / ITEMSPERBUCKET);
uint32_t index = (hashFunction(currentWord)%(indexSize-1));
dictNode *temp = malloc(sizeof(dictNode));
temp = chainedHashTable[index];
do
{
if (strncmp(temp->word, currentWord, temp->len) == 0)
{
wordPresent = true;
temp = NULL;
}
else
{
temp = temp->next;
}
}
while (temp != NULL);
free(temp);
return wordPresent;
}
非常感谢任何帮助。
答案 0 :(得分:4)
在分配后,你在最后一行丢失了temp
的malloc'd值...之后你没有得到free()
的值。
此外,当您最终退出while
循环并且在调用free()
之前,temp == NULL。
答案 1 :(得分:4)
直接在malloc
之后,
dictNode *temp = malloc(sizeof(dictNode));
temp = chainedHashTable[index];
用malloc
覆盖chainedHashTable[index]
内存的地址。因此,您丢失了malloc
内存的唯一句柄,并泄漏了。
幸运的是,你正在解放什么
while (temp != NULL);
free(temp);
是一个空指针,free
是无害的。例如,如果您尝试free
chainedHashTable[index]
,那可能会破坏您的计划。