由于某些原因多次调用我的函数'delAll'将导致Valgrind无效的自由错误。我不明白为什么如果我第二次调用这个函数会导致程序再次进入while循环,即使它只是节点的“delAll”
// p是一个带调用的链接列表
struct node{
char *str, int data, struct node *next;
}
//这是我遇到问题的功能:
void delAll()
{
struct node *temp,*temp2;
temp=p;
while(temp!=NULL)
{
temp2=temp;
temp= temp->next;
free(temp2->str);
free(temp2);
}
}
答案 0 :(得分:1)
p
是指向列表的指针,现在它仍然会在delAll调用指向列表的(free'd)开头之后。我只是这样做;
p=NULL;
...在你的while循环之后将p设置为null(即正确清除列表)。这将阻止您的delAll再次尝试释放所有元素。
当然这取决于p
而不只是一个临时变量,我假设它是真正的“列表开始”指针。