[838] Re:マスタングさんへ
投稿者:マスタング
2007/02/20 02:13:25
>>startは、staをさしている訳で、エラーの原因はstaは
>>動的に確保されたオブジェクトではないからです。
>御意なのですが、だからといって最初を除外して free するというのも間違いと思う。
間違いではないと思います(逆に正解だとも言えません)。
ある意味どっちでも良いと思います。
サンプルの例ではauto変数であるstaがリンクリストの先頭な訳で、
これをそのまま(あるいはアドレスを)渡した方が分かりやすいと思った訳です。
free_list(sta.next);やfree_list(start->next);は分かりにくい気がします。
何でリンクリストの先頭(あるいはリンクリストそのものを表すもの)を
渡さないで、nextの要素を渡さないといけないのかという気がします。
確かに関数の汎用性を考えれば最初を除外するのは良くないと思います。
しかし、そういう次元の議論ではありません。
また、そもそもマルチプルインスタンスを考えた実装にはなっていないので
マルチプルインスタンスに対応しようとすると破綻するのはしょうがないと
思います。
私ならlist(は名前を変えたい)の上にラッパーの構造体
(仮にllistとしましょう)を作成し、その中にlistの先頭を入れてあげます。
こうすれば、llistの中にダミーのstaも持たせることできますし、
どうにでも実装できます。free用の関数も以下で問題ないです。
free_llist(llist *head);
マルチプルインスタンスだって当然できます。
問題は、どこまで実装を抽象化するかであり、今の負け組一号さんの
実装を踏襲するならば774RRさんのご指摘通り、問題点は多いです。
>リンクリストで番兵を使うというのが根底の発想として間違っている気がします。
また、これも間違っているとは断言できないと思います。
あくまで実装の問題で、実装を分かりやすくするために
番兵を入れるのであって、番兵を使うのが間違いではないと思います。
但し、負け組一号さんの番兵(ダミー?)の使い方が適切だとは
私も思っていません。