技術とか戦略とか

IT技術者が技術や戦略について書くブログです。

NUL文字・LOW-VALUEやスペースを入れたつもりなのに入ってない→それって不定値かも?

不定値(初期値が与えられていない変数)をうっかり使ってしまうと、表題のようなことになることがあります。
javaではコンパイルエラーになるのですが、C言語COBOLだとコンパイルエラーにならないので、実行してから気付くことになります。
 
変数が宣言され、メモリ上に変数の領域が確保された時点では、変数はその領域にたまたま入っていた値を示すことになります。
多くの場合は0x00(NUL文字・LOW-VALUE)になるのですが、その保証はありません。
そのため、誤って不定値をNUL文字・LOW-VALUEやスペース(帳票や画面に出力する場合)として使用してしまうと、以下のような現象が発生する可能性が出てきます。
・変な文字が出力されてしまう
・NUL文字やLOW-VALUEと比較する箇所で、上手く条件判定できない
・NUL止め(ヌル終端)されずに意図していない領域まで使われてしまう(C言語)
 
不定値の問題で厄介なのは、実際に動かすまでどのような値が入るかわからない所です。
多くの場合は0x00となるため、テストの時点では0x00であったために見過ごされて、本番運用の時点で初めて0x00以外の値が入り問題が出る、ということも起こり得ます。
テストしてもバグとして検出されるとは限らないので、コードレビュー時にチェックリストを用いて確実にチェックされるようにするか、可能であればツール等で自動的に検出されるようにするかした方が良いです。