その他にもいろいろ「いやらしい」個所はあるのですが、free連続技には負 けていますので、主要なものを個条書にして、この Never Ending Functionを 終えることにします。
ポインタを活用していません。あるいは、ポインタを活用できるような型 (構造体)を作っていません。
具体的には、黒々と見えている個所で、
という具合に、構造体のメンバー名を延々と構造体演算子"."(ピリオド) で連ねています。何行にもわたり、ほとんど同じで、最後のメンバー名だけが 異なるものが多数あります。このような個所は、適当にポインタで置き換えた いものです。
コンパイラが型の不一致でワーニングをどんどん出すので、片っぱしからキャ ストをしたようです。キャストは、あくまでも「ごまかし」に過ぎませんから、 使用はつつしみましょう。せっかくコンパイラが、プログラムの欠陥情報を報 告してくれているのに、キャストでそれを出なくしてはもったいないです。
当然、キャストなどしなくてもすむように、いろいろな変数などの型をちゃ んと、自然なものに定義しましょう。
memsetなどの関数を「メモリオペレーション」とか「メモリ操作関数」とか 呼びます。文字列操作関数(strcpyなど)同様、これらはあまり使いたくない関 数です。使うにしても、できるだけ少なく使いましょう。
mallocしてから、memsetでゼロクリアしていますが、それなら、callocを使 いましょう。