gpt4 book ai didi

c - Valgrind 链表内存泄漏

转载 作者:行者123 更新时间:2023-11-30 16:43:49 24 4
gpt4 key购买 nike

当我使用 valgrind 运行程序时,我注意到在实现此函数时只有很小的内存泄漏(2 个 block )。这会删除该节点,并且当打印出列表时该节点不再出现。

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);
}
}

如有任何建议,我们将不胜感激。

最佳答案

对于链接列表,我曾经添加额外的间接寻址,因此在处理列表头时不需要额外的处理。

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
}

关于c - Valgrind 链表内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44961165/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com