C语言中的动态数据结构(例如链表、树)通常通过手动使用指针和动态内存分配(malloc、calloc、free)来实现。
typedef struct Node { int value; struct Node* next; } Node; Node* create_node(int value) { Node* n = malloc(sizeof(Node)); if (!n) return NULL; n->value = value; n->next = NULL; return n; } void free_list(Node* head) { while (head) { Node* tmp = head; head = head->next; free(tmp); } }
是否可以在循环中仅使用当前指针释放链表的节点内存?
在未提前保存下一个节点的情况下,不正确地释放当前节点!在调用free后,内存地址可能会被重写或返回给操作系统。
正确的方法:
Node* curr = head; while (curr) { Node* next = curr->next; free(curr); curr = next; }
如果不保存next,就会访问已经释放(且可能不属于你的!)内存。
历史