对于我正在处理的程序,我有一个双向链表。我现在必须弄清楚特定数据(称为id
)变为负数的特定节点,然后取消引用以下节点并释放内存。当我调用此函数(粘贴在下面)时,执行最后一个print语句并在屏幕上打印。但是程序没有返回main。它只是挂起。 (在这个函数调用之后,我有另一个没有执行的print语句,程序无休止地挂起)。
static void clear_ghosts(particles *plist)
{
particles * temp = plist;
while(temp!=NULL) {
if(temp->p->id < 0)
{
break;
}
temp = temp->next;
}
if(temp)
{
particles * current = temp;
particles * next;
while(current !=NULL)
{
next = current->next;
free(current);
current = next;
}
temp = NULL;
}
printf("\n Finished Clearing \n");
return;
}
此处plist
是struct particle *
类型的链接列表。 plist
有数据p
,它本身就是一个结构,并且有成员数据,如id
等。我需要遍历列表并在遇到负数的成员标识时终止列表。我得到输出“完成清算”,但功能没有返回到主。
可能出现什么问题?
答案 0 :(得分:0)
您确定要free()
的所有元素都已分配malloc()
吗?例如,如果某些指针指向堆栈中的内存,当您尝试free()
时,可能会发生各种可怕的事情。
答案 1 :(得分:0)
由于你说它是一个双链表,你应该将前一个元素的下一个指针设置为NULL:
if (temp)
{
if ( temp != plist )
{
temp->prev->next = NULL;
}
...