我的cs50拼写函数终于可以使用了,但是当将它输入到check50中时,它说Valgrind存在内存错误。这是我的卸载功能,应该可以释放以前分配的所有内存。
bool unload(void)
{
for (int i = 0; i < N; i++)
{
node *pointer = table[i];
while (table[i] != NULL && pointer != NULL)
{
node *tmp = pointer;
pointer = pointer->next;
free(tmp);
}
free(pointer);
}
return true;
}
答案 0 :(得分:2)
仔细研究一下循环,您可以确定到进行free(pointer)
调用时,pointer
已经为NULL。您不能取消分配NULL指针。
得知Valgrind可以找到该错误,我不会感到惊讶,但也不会惊讶。这不是完美的。而且check50可能有或没有问题(如果check50在其他计算机上运行,则可能使用的Valgrind版本与您使用的版本不同),但是您仍然应该删除free(pointer)
行。 / p>
Yunnosch的评论是正确的:您不需要检查table[i] != NULL
; pointer
为NULL时,它将始终为NULL。
答案 1 :(得分:0)
bool unload(void)
for (int i = 0; i < N; i++)
{
node *pointer = table[i];
while (pointer)
{
node *tmp = pointer;
pointer = pointer->next;
free(tmp);
}
}
return true;
}