「~自分のプログラムを100回疑え」。大学でC言語を勉強していたときの先輩の言葉です。
別にこれはどの言語でも当てはまる事なのですが、特に(.NETを除く??)C/C++言語は実行時に変数型や値のチェック、自動型変換などほとんどやってくれないため、高速で曲芸的なことをするプログラムが書ける一方奇妙なバグを生みやすく、また奇妙ゆえ原因も分かりにくく、ついコンパイラやライブラリに問題があるのではないかと疑いたくなります。
しかしマイナーな製品ならともかく、MicrosoftやGNUのコンパイラ・ライブラリは出荷前はもちろんの事、出荷後も世界の多くの人が使用して動作を確認しているわけでして、そう頻繁に問題に出くわすわけはない。99%自分の書くプログラムに問題があるはずだから何回でも見直しなさい、というのが上の言葉の解釈です。
今日はTcl から呼び出されるコマンドのWindows DLLをVisual Cで書いていたのですが、実行するたびに使用メモリが増えていく、いわゆるメモリーリークに悩まされていました。使用メモリの大きさから、この部分のメモリが解放されなければ計算上はつじつまが合うというのは目処をつけたのですが、解放する処理は行われているはずでなぜ解放されないのか分からない。Tcl拡張コマンド用DLLという特殊な物でもあり、なにかメモリを解放するライブラリにバグがあるのではと頭をよぎったのですが・・・
やっぱり私が悪うございました orz
別の箇所でまったく同じ量のメモリを確保していて、そちらを解放していなかったというお粗末な内容。
ちなみに私の経験の中で自分のプログラムが悪くなかった(と思う)のは、Windows 95のTrueTypeを描画するAPIだけです。まったく同じプログラムをWindows NTで実行したら何の問題も無かったので・・・
Comments