2016-10-09 33 views
-2

該函數在下面的代碼中傳遞雙向鏈表的目的是逐個獲取列表中的節點並釋放它們。但每次我嘗試調試我的程序。它給了我這個信息:「拋出的異常:讀取訪問衝突currNode是nullptr。」我在代碼中遇到了麻煩,我在做什麼錯誤或缺少導致這種情況?銷燬C中的雙鏈表List

void DListDestruct(DList* list) { 
DListNode* currNode; 
DListNode* next; 

currNode = (DListNode*)malloc(sizeof(DListNode)); 
currNode = list->head; 

if (currNode == NULL) { 
    return; 
} 


while (list->head != NULL) { 

    next = currNode->next; 
    free(currNode); 
    currNode = (DListNode*)malloc(sizeof(DListNode)); 
    currNode = next; 

} 

list->head = NULL; 

return; 
} 
+0

'malloc'不是必需的。和'while(list-> head!= NULL){' - >'while(currNode!= NULL){' – BLUEPIXY

+1

您的連續行'currNode =(DListNode *)malloc(sizeof(DListNode));'和 ' currNode = list-> head;'泄漏內存。不要分配並覆蓋指向已分配空間的指針。 –

+0

「* ... currNode爲nullptr。*」聽起來像C++。 – alk

回答

1

你的循環測試list->head,其中循環體永遠不會改變。由於currNode是被釋放的,這可能是您應該檢查的內容。