Valgrind内存泄漏与链表

时间:2017-07-07 01:26:15

标签: c memory-leaks linked-list

当我用valgrind运行我的程序时,我注意到当我实现这个功能时,我只有一个小的内存泄漏(2个块)。这将删除节点,当打印出列表时,节点不再显示。

car *removeCar(car *head, char *targetModel) {

car *temp=head;
car *temp2=head->next;

if(strcmp(temp->model,targetModel)==0) {
    return head;
}

while(temp2!=NULL) {
    if(strcmp(temp2->model,targetModel)==0) {

        temp->next=temp2->next;
        free(temp2);

        return head;
    }

    temp=temp->next;
    temp2=temp2->next;
}

return head;
}

这是我的免费功能。在我选择调用removeCar函数之前,它一直在释放内存。

void freeMem(car *head) {/*Function frees all memory allocated to linked lists*/

car *current=NULL;

while((current=head)!=NULL) {
    head=head->next;
    free(current->model);
    free(current->color);
    free(current);
}
}

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

使用链接列表我曾经添加了额外的间接,所以在处理列表的头部时我不需要额外的处理。

car *removeCar(car *head, char *targetModel) 
{
    car * * ppNode = &head;
    while (*ppNode)
    {
        car* pCurrent = *ppNode;
        if(strcmp(pCurrent->model,targetModel)==0) 
        {
           //replace the reference to pCurrent by its successor
           *ppNode = pCurrent->next;
           free(pCurrent->model);
           free(pCurrent->color);
           free(pCurrent);
           break;
        }
        ppNode = &pCurrent->next;
    }
    return head; //possibly changed
}