我怎么在这里泄漏记忆,每次分配记忆时,我都会释放温度,不是吗?

时间:2013-04-15 18:41:37

标签: c

泄漏记忆功能的链接。

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

http://codepad.org/G8uuS79s

非常感谢任何帮助。

2 个答案:

答案 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],那可能会破坏您的计划。