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;なしもアリかもしれない。