Problem Set 5 - debugリスト
やっつけ仕事の元のコード
dictionary.c · GitHub
dictionary.h · GitHub
(おまけにコンパイル前でたくさんエラーあり。ざっと目を通しただけでも直すべき箇所を以下に)
- #include ”dictionary.h”をどこに入れるか
- hash関数をdictionary.cで定義してもOK、global 関数として定義すればOK
- char配列をwhileの外で宣言する、空のテンプレートを作っておき、whileの中でnodeを宣言する。
→コピーする
== EOFを使わない理由はメモリリークをしないようにするため。
== EOFを使用する場合、mallocでallocateしたmemoryがlinked list及びhash tableに入らない→freeでfreedすることができない。→memory leakを防げない
(左辺 != EOFはしばしば用いられるが、左辺 == EOFは滅多に見ないという直感通りで。理由があったのね)
copyするやり方だとmemory leakしないで済む。
- whileが終わった直後にreturn true;を書く。
(全て成功裏に終わったときに最後に一回だけ記す)
return false;は、失敗する場所がいくつかあるので、各々の箇所にちょこちょこreturn false;を書いていく。mallocできない時とか。
すなわち、きちっとfalseのcheckをしていないと、大したチェックも成されないままtrueが返され得る。
- mainの返す値は0がtrueと見なされるが、c言語全体では0がfalse!!
- countはdictionary.cで宣言すべき。or headerに置いたままにするならstaticをつけること。
(なぜならリンクした時に重複してしまい、エラーになる)
- count部分、return countしてるのと一緒
- unload falseも適当にfalse地点を定めておく。(どういう場合に失敗するかぐぐる)
freeは簡単にエラーを返さないのでreturn false;なしもアリかもしれない。