尻拭い作業
先日来、他人が書いたプログラムの尻拭い。
症状は、
入ったデータと出てくるデータ、なんかおかしい。
たくさんのデータがあるんで、まずは、何をどうしたら
おかしくなるかからの検証。 これがたいへん。
で、なんとなくシッポをつかんだようなので、
ソースファイルを眺めて(もちろんエディタやらGREP
のチカラを借りて)、怪しいところをチェック。
すると… ありました。
配列に対するポインタの名称「スペル」を間違ってま
した。
似たようなデータがあれこれあるので、データ名やら
ポインタ名まで似ています。
そして… スペルが長い!
ズバリは書けないんで、こんな感じ。
配列名 abc_defg_hijk[]
ポインタ名 abc_d_xyz_ptr
これが ↓
abc_d_xyz_qtr
と1文字違いの名称を使ってる。
プログラムを書く時、似たような処理だと、ソース行を
コピペして、配列やポインタなど、名前の違うところを
修正。
トラブルの原因は、これの修正忘れです。
名称の後端を数字にとかにしてるとわかりやすいかと思
うんですが、途中の文字が1文字違い。
このポインタ、通常の動きでは、他では使われてないんで
値はゼロ。 配列の先頭を示します。
そして、この配列には、いちばん最初のデータ確定で、
配列全部に同じ値が入ります。
その後、データ確定ごとに配列の中身を順に更新してい
くんですが、ポインタ名を間違っているもんだから、配列
の先頭だけしか書き変わりません。
あとは、初期値。 (間違ったデータじゃないので)
そして、何かのひょうしのポインタがゼロじゃなくなったら、
書き込み場所がどっかにいっちゃいます。
※ポインタの値の範囲は配列サイズ内だったんで、
この配列しかアクセスしませんでした。
文字とかだったら分かりやすいんですが、これ、通常は
大きく変動しない数値データなんです。
そして、値が変動すると、計算結果で出てくる数値がちょ
いとだけ動く。
だから、「なんかおかしいなぁ」「何かの誤差かな」
「こんなもんかな」ですまされていたみたいです。
人の作ったプログラムです。
ソースを記すスタイルなんですが、ぱっと見で、スペルの
ミスをわかるようしておいてもらいたいところ。
関数の名も、似たようなのが散在しています。
わたしゃ、長い名前はキライです。
|
2016年9月5日 17時47分
|
記事へ |
コメント(1) |
トラックバック(0) |
|
・電子回路工作 |
トラックバックURL:http://blog.zaq.ne.jp/igarage/trackback/4523/
※ブログ管理者が承認するまで表示されません
まとめて、てなことするとミスは無くせると思うんですが、なにせ
人が書いたプログラムです。
昔々、まだマイコンのCコンパイラが一般的じゃなかった頃
の話。
「サンプル(動きかけている)のソースはあるけど…」
なんてことになったんですが、あたしゃ、
『処理速度もいるし、アセンブラで書き直すわ』
なんて、仕事をしたこともあります。
パワーがありました。