K.Maebashi's BBS 投稿フォーム
ハンドル名
件名
Link
>>なるほど!! >>ありがとうございます >>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 >
spamよけのため、ここに「ほげぴよ」と入力してください。
削除パスワード :
クリック!