7年ぶりの餃子

7年前に作った餃子を VC++.NET2003 で再コンパイルしてみました。
当時は VC++4.2 のアカデミック版を買ったばかりで、初めて見る統合環境の使い方もさっぱりわからず、
nmake でせこせことコンパイルしていたのを思い出します。

…で、Debug ビルドが通ったので実行してみたところ、いきなり落ちました(汗)。
VC++4.2 のときは問題なく動いてたのに…と思いつつ、7年前のソースをデバッガでおいかけてみたところ、
構造体の変数が一つ未初期化でした。がーん…7年越しのバグかいな…(T_T)。

VC++ の Debug ビルドは未初期化領域に 0xcdcdcdcd をセットしてくれるので今回は簡単に見つかりましたが、
Release なら本当に未初期化のまま突っ走るので、その時のメモリの状態によって落ちたり落ちなかったりして原因追求しにくいバグとなります。
(そして、客先や大勢の人の前で披露するようなときに限ってよく落ちる ^^;)

問題の箇所は 0 に初期化されていたら問題なく動くようになっていたので、当時の VC++4.2 では未初期化領域は親切に 0 でクリアするようになっていたのではないかと思います(推測)。

前の会社で、MipsProC++ (IRIX のコンパイラ) で動いていたソースを VC++6.0 に持っていってビルドすると落ちる問題が起き、その時の原因も同じでした。
当時は親切な MipsProC++ と違って VC++ ってシビアやなーと思いましたが、そもそも初期化してない方が悪い(^^;)。
早めに気づかせてもらえるのは実にありがたいことです。