当我用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);
}
}
任何建议都将不胜感激。
答案 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
}