メモリを確保するためには malloc() 関数を使う. malloc() 関数のプロトタイプ宣言は stdlib.h に書かれているので include すること.
malloc() 関数の引数は確保する領域の大きさである. 特定の変数,構造体,配列の実際の大きさを求めるには sizeof() 演算子を使う.
malloc() 関数から返ってくる値は void * である. これを適当な値にキャストして使う.キャストをしないと中身を構造体や配列として扱えない. (その型の変数に代入すればだいたいうまくいくけど…)
メモリを確保できなかった場合, malloc() 関数はメモリのどこも指していない値(NULLポインタ)を返す. その場合にはプログラマにはできることはほとんどない. UNIXのプログラムだったら黙って終了するのも漢の生き様に通じると考える.
確保されたメモリの内容は真っ先に初期化すること. malloc() 関数で確保されたメモリの中身にはゴミがつまっている. 0やNULLといった値では初期化されていない.
その後で値を代入するから大丈夫,と思うのも危険である. 後から余計なif文などを付け加えて,値を代入しないままになってしまうことが起こる.
ポインタならNULLになっていれば,アクセスしたときに Null Pointer Exception を検出できる. ゴミ値が入っていて,かつ運が悪いとどこかのデータが黙って書き換えられてしまう.
リストをつないだりはずしたりする処理は簡単に見えて非常に複雑. 必ず図示しよう.
頭の中で考えているとまずうまくいかない.
デキるプログラマほど,プログラムを書いて,修正している時間は少ない. そのかわり,メモをとったり,図を描いたりしている時間が長い.
使い終わったメモリは free() 関数でリサイクルに回すのがマナー.
ただし,必ずしも本当にリサイクルされるとは限らない.
また,free() 関数の返り値は,どんな値を受け取ったところでプログラマにできることはないので, 受け取らないことにする.
(都合によりプログラムは表示できません)