忘れないようにメモメモ

数年前につくったコードで、10年以上前のデーター(を元に再解析した後のデータ)のチェックをしなければならなくなった。そもそも数年前につくったコードということで、うまく動かない事は想定の範囲内だったのだが、昔のデータというか、そのチェックに必要な設定ファイルの内容で、プログラムが動かない(というわけではないのだが。。。)事が起きるなんて。想定範囲内といえば範囲内。

なにが起きたか?シリアル番号のふってある一連のデーターを扱うため、

  1. (テキスト)ファイルからの読み込み: btree構造をもつ構造体をつくる
  2. シリアル番号最大値をサイズにもつ上記構造体のポインター変数の配列をつくって、シリアル番号からアクセスを簡単にする

ということをしていた。後年の設定ファイルの中でシリアル番号は1からはじまる。1つづつ増加しているので、上記のような実装をしてもそれほど問題はなかった。他に応用があるわけでもないし、そもそも設定ファイルというのは半自動生成されるので、シリアル番号に問題は起きにくい。

なのに、なぜ、この年のファイルはシリアル番号が0から始まるかな。。。1から始まるので配列への入力はシリアル -1 で行っていたわけで、そりゃsegmentation fault 起きるよね。

話がややこしくなったのは、[-1]でアクセスした特に segmentation fault がおきればいいのに、そこは特に問題なく進行し、mallocで確保していたメモリをfreeするときにおきやがる。プログラムの構造というかポリシーをすっかり忘れてしまっていたので、バグとりに時間がかかりすぎだよ。

実際、バグの原因がシリアル番号0のデータということが分かるのに半日。その時点で原因は不明。そのあと数時間後に「そりゃそうか」と気づく。プログラムにコメントを残すというのはとても大事な事なんだけど、残っていたコメントはあまり役に立たないし。。。。自分の事ながらまったく。