我正在使用链表结构中的两种free()
“ing ”内存的方法。malloc()
假设我用下面的 C 代码创建了一个单链表;
#include<stdio.h>
#include<stdlib.h>
struct node_type{
int data;
struct node_type *next;
struct node_type *prev;
}
typedef struct node_type node;
typedef struct node_type *list;
void main(void){
list head,node1,tail;
head=(list)malloc(sizeof(node));
tail=(list)malloc(sizeof(node));
node1=(list)malloc(sizeof(node));
head->next=node1;tail->prev=node1;
node1->prev=head;node1->next=tail;node1->data=1;
/*Method-1 for memory de-allocation*/
free(head->next->next);
free(head->next);
free(head);
/*OR*/
/*Method-2 for memory de-allocation*/
free(tail);
free(node1);
free(head);
/*OR*/
/*Method-3 for memory de-allocation*/
free(node1);
free(tail);
free(head);
}
现在,我有以下问题:
Q1) 上面代码中显示的三种内存释放方法中哪一种是正确/错误的。
Q2) 是否有必要按照free()
方法 1 和 2 中使用的 'ing 内存中的任何顺序进行内存解除分配或随机free()
'ing 内存也可以?