對於我正在處理的程序,我有一個雙向鏈接列表。我現在必須找出一個特定的節點,其中一個特定的數據(稱爲id
)變爲負數,然後解引用下面的節點並釋放內存。當我調用這個函數(粘貼在下面)時,最後的打印語句被執行並在屏幕上打印。但是該程序不會返回到main。它只是掛起。 (在這個函數調用之後,我有另一個不能執行的打印語句,程序不停地掛在那裏)。鏈接列表C代碼掛起而沒有從「釋放」函數返回
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
等成員數據。我需要遍歷列表並終止列表時遇到成員id爲負面的列表。我得到的輸出「Finished Clearing」,但函數沒有返回到main。
可能會出現什麼問題?
郵政主代碼,它出現的問題可能是在那裏。 –
你怎麼知道它沒有回到main? –
如果它真的雙重鏈接,你應該對'prev'字段做些什麼。 – glglgl