Loops 对释放循环中的malloc内存感到困惑吗
我刚刚完成了cs50的pset5,其中一个函数用于将字典的内容加载到哈希表中。在所述函数的循环中,我必须为一个节点分配malloc内存,稍后我将分配给哈希表中的节点 当我尝试在每次循环迭代后释放节点n时,我的函数将无法工作。 当我不释放它时,它确实工作了,更令人困惑的是,它还通过了valgrind检查和cs50的内存泄漏检查 我的问题是:Loops 对释放循环中的malloc内存感到困惑吗,loops,malloc,Loops,Malloc,我刚刚完成了cs50的pset5,其中一个函数用于将字典的内容加载到哈希表中。在所述函数的循环中,我必须为一个节点分配malloc内存,稍后我将分配给哈希表中的节点 当我尝试在每次循环迭代后释放节点n时,我的函数将无法工作。 当我不释放它时,它确实工作了,更令人困惑的是,它还通过了valgrind检查和cs50的内存泄漏检查 我的问题是: 如何释放“node n”以允许我的函数仍然工作 为什么valgrind在我没有释放“n”时没有检测到任何内存泄漏?这是未定义行为的例子吗 循环中的mall
bool load(const char *dictionary)
{
//Setting counter to determine wheather node comes second in linked list or not.
int counter = 0;
//declaring string array to store words from dictionary
char word1[LENGTH +1];
FILE *dic = fopen(dictionary, "r");
if(dic == NULL)
{
return false;
}
//Loop loading words from dictionary to hash table
while(fscanf(dic, "%s", word1) != EOF )
{
node *n = malloc(sizeof(node));
if (n == NULL)
{
return false;
free(n);
}
int i = hash(word1);
//Storing word in temporary node
strcpy(n->word, word1);
n->next = NULL;
//Three different conditions(first node of[i], second node of[i], and after second node of[i])
if(table[i] == NULL)
{
table[i] = n;
counter++;
counter2++;
}
else if (counter == 1)
{
table[i]->next = n;
counter = 0;
counter2++;
}
else
{
n->next = table[i];
table[i] = n;
counter2++;
}
}
fclose(dic);
return true;
我想我刚刚理解,当我将指针“node n”分配给“table[I]”时,table[I]会超过分配给“node n”的内存,对吗?这可以解释一切。对不起,我还在想一些基本概念。@WojtekZ是的,表[I]拥有这些内存。