>なるほど!!
>ありがとうございます
>void free_list(list *start)の内容を見て、なっとくっす。
>チェーンをたぐりよせてmalloc()で取った領域を開放を繰り返し
>NULLが来て、解放終わりって感じですね。
>すっごいわかりました。本当にありがとうございました。
void free_list(list *start) {
list *curr, *temp;
for (curr = start->next; curr != NULL;) {
temp = curr->next;
free(curr);
curr = temp;
}
start->next = NULL;
}
あとで気がついたのですが、最後の行
start->next = NULL;
という一行も入れておいた方が良いです。
これをしておかないと、freeした後に間違えて
staのnextの参照や書き込みを行った場合問題となります。
参照をしたタイミングではオブジェクトはなくても
ポインタの値は残っていて(ダングリングポインタと言います)
不正なアクセスとなります。
これは、問題の原因があるところと問題の発生位置
(別のところでアクセスバイオレーションになったりする)
がずれる可能性があるため、気づきにくいバグとなります。
ここら辺の知識はポインタ関係ですので、(ぱ)さんの
「C言語ポインタ完全制覇」はかなりお勧めです。
私もこの本に早く出会っていればもっと早くレベルアップ
できたのにと思っています。
http://www.amazon.co.jp/exec/obidos/ASIN/4774111422/qid=1141917620/br=3-1/br_lfncs_b_1/249-0186723-6715515