2016-10-09 36 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是被释放的,这可能是您应该检查的内容。