私は、リンクリスト構造でメモリをfree()
「ing 」する2つの方法でジャグリングしています。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)上記のコードに示されているメモリの割り当て解除の3つの方法のうち、正しい/正しくないものはどれですか。
Q2)free()
メモリの割り当て解除のために方法1と2で使用されているように、メモリ内の任意の順序に従う必要がありますか、それともランダムにメモリを使用してfree()
も問題ありませんか?