您的链接列表应该是:
head
+---+ +---+ +---+
| 1 |--->| 2 |--->| 3 |---+
+---+ +---+ +---+ |
null
Run Code Online (Sandbox Code Playgroud)
head节点只保留第一个节点的地址,如果这样做free(head),那么它将释放第一个节点的内存1 只有值而其他节点仍然在内存中并且它有效访问它们,但是你应该首先保存节点的地址2,以便访问链接list(否则你的代码中会出现内存泄漏).
喜欢:
new_head = head->next;
free(head);
Run Code Online (Sandbox Code Playgroud)
一旦你释放/ free()一个内存,它的未定义行为就不能访问(地址变得无效).
来自评论:
是的,你需要为链表中的所有节点提供一个循环到free()内存,做这样的事情:
while(head){ // while head not null
new_head = head->next; // first save address of next
free(head); // free first node
head = new_head; // set head to next node, not yet free
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
5495 次 |
| 最近记录: |