作成したプログラムの抜粋
C
1// 単方向リスト 2typedef struct list{ 3 char list_name[256]; 4 struct list *next; // 次のノードのアドレス 5} LIST; 6LIST *list_head = NULL; 7LIST *list_tail = NULL; 8 9int main() 10{ 11 LIST *p, *q; 12 13 (適当な処理により単方向リストを生成) 14 15 /* メモリの解放 */ 16 p = list_head; 17 while(p != NULL){ 18 q = p->next; 19 free(p); 20 p = q; 21 } 22 23 return 0; 24}
質問
このメモリの解放は正しくできているでしょうか?
出来ていない場合は誤りを指摘いただければ幸いです。
補足
みなさま、たくさんのご回答ありがとうございます。
以下により、メモリを動的に確保しています。
質問の意図は、正しく単方向リストが作られたものとして、それをプログラムの終わり際にすべてメモリ解放して、メモリリークを防ぎたいというものです。
したがって、単方向リストすべてがfreeされていますか、という質問です。
C
1LIST *newNode; 2newNode = (LIST *)malloc(sizeof(LIST)); 3 4(その他、単方向リストを正しく作成する処理)
> (適当な処理により単方向リストを生成)
の部分は,まぁ,「示さずとも想像がつくだろ」って話なのでしょうが,
「解放処理が正しいか?」と言われれば,それを作った箇所が「本当に想像通りか」次第となるわけですから,
そこも省略せずに示すべきではないかと.
> それをプログラムの終わり際にすべてメモリ解放して、メモリリークを防ぎたいというものです。
プログラムの終わりに限った話なら解放する必要はありません。
メモリリークも起きません。
> newNode = (LIST *)malloc(sizeof(LIST));
これがどこでどのように何度呼ばれているかで正しく解放されているかどうかも変わります。
私の場合は、プログラムの終わりでもfreeしなければならないという制約があります。
なんだ、そういえば課題か。
回答3件
あなたの回答
tips
プレビュー