Tue Nov 11 09:15:00 JST 2008

プログラミング演習2 必須課題7-1 リストを用いたキューの基本操作

解き方のヒント
  • メモリを正しく確保せよ
  • 確保されたメモリの内容は初期化せよ
  • リストにつなぐには「図示」せよ.頭で考えてもダメ
  • メモリをリサイクルせよ
メモリを正しく確保せよ

メモリを確保するためには malloc() 関数を使う. malloc() 関数のプロトタイプ宣言は stdlib.h に書かれているので include すること.

malloc() 関数の引数は確保する領域の大きさである. 特定の変数,構造体,配列の実際の大きさを求めるには sizeof() 演算子を使う.

malloc() 関数から返ってくる値は void * である. これを適当な値にキャストして使う.キャストをしないと中身を構造体や配列として扱えない. (その型の変数に代入すればだいたいうまくいくけど…)

メモリを確保できなかった場合, malloc() 関数はメモリのどこも指していない値(NULLポインタ)を返す. その場合にはプログラマにはできることはほとんどない. UNIXのプログラムだったら黙って終了するのも漢の生き様に通じると考える.

確保されたメモリの内容は初期化せよ

確保されたメモリの内容は真っ先に初期化すること. malloc() 関数で確保されたメモリの中身にはゴミがつまっている. 0やNULLといった値では初期化されていない.

その後で値を代入するから大丈夫,と思うのも危険である. 後から余計なif文などを付け加えて,値を代入しないままになってしまうことが起こる.

ポインタならNULLになっていれば,アクセスしたときに Null Pointer Exception を検出できる. ゴミ値が入っていて,かつ運が悪いとどこかのデータが黙って書き換えられてしまう.

リストにつなぐには「図示」せよ.頭で考えてもダメ

リストをつないだりはずしたりする処理は簡単に見えて非常に複雑. 必ず図示しよう.

頭の中で考えているとまずうまくいかない.

デキるプログラマほど,プログラムを書いて,修正している時間は少ない. そのかわり,メモをとったり,図を描いたりしている時間が長い.

メモリをリサイクルせよ

使い終わったメモリは free() 関数でリサイクルに回すのがマナー.

ただし,必ずしも本当にリサイクルされるとは限らない.

また,free() 関数の返り値は,どんな値を受け取ったところでプログラマにできることはないので, 受け取らないことにする.

(都合によりプログラムは表示できません)


Posted by Hiroya ITOGA | Permanent link | File under: programming_exercise_2_2008