链接列表C代码挂起而不从'freeing ing'函数返回

时间:2011-10-14 11:56:47

标签: c linked-list free hang

对于我正在处理的程序,我有一个双向链表。我现在必须弄清楚特定数据(称为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;

}

此处pliststruct particle *类型的链接列表。 plist有数据p,它本身就是一个结构,并且有成员数据,如id等。我需要遍历列表并在遇到负数的成员标识时终止列表。我得到输出“完成清算”,但功能没有返回到主。

可能出现什么问题?

2 个答案:

答案 0 :(得分:0)

您确定要free()的所有元素都已分配malloc()吗?例如,如果某些指针指向堆栈中的内存,当您尝试free()时,可能会发生各种可怕的事情。

答案 1 :(得分:0)

由于你说它是一个双链表,你应该将前一个元素的下一个指针设置为NULL:

if (temp)
{
   if ( temp != plist )
   {
     temp->prev->next = NULL;
   }
...