无效的Valgrind

时间:2012-03-07 20:12:41

标签: memory-management

由于某些原因多次调用我的函数'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);

}

}

1 个答案:

答案 0 :(得分:1)

p是指向列表的指针,现在它仍然会在delAll调用指向列表的(free'd)开头之后。我只是这样做;

p=NULL;

...在你的while循环之后将p设置为null(即正确清除列表)。这将阻止您的delAll再次尝试释放所有元素。

当然这取决于p而不只是一个临时变量,我假设它是真正的“列表开始”指针。