ニックネーム: 居酒屋ガレージ店主
★ZAQのBlogari停止のため、あれこれ「データ吸い出し」対策しています。 新規記事はとりあえず停止。 コメント書き込みはまだ有効です。 (JH3DBO 下間憲行)
2016年09月05日(月)
尻拭い作業
先日来、他人が書いたプログラムの尻拭い。
症状は、
  入ったデータと出てくるデータ、なんかおかしい。

たくさんのデータがあるんで、まずは、何をどうしたら
おかしくなるかからの検証。 これがたいへん。

で、なんとなくシッポをつかんだようなので、
ソースファイルを眺めて(もちろんエディタやら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/
※ブログ管理者が承認するまで表示されません
2016年09月05日(月) 21:46 by 居酒屋ガレージ店主(JH3DBO)
配列とそれをアクセスするためのポインタなどを「構造体」に
まとめて、てなことするとミスは無くせると思うんですが、なにせ
人が書いたプログラムです。

昔々、まだマイコンのCコンパイラが一般的じゃなかった頃
の話。
  「サンプル(動きかけている)のソースはあるけど…」
なんてことになったんですが、あたしゃ、
   『処理速度もいるし、アセンブラで書き直すわ』
なんて、仕事をしたこともあります。
パワーがありました。

コメントを記入  
お名前(必須)
 
パスワード:
 
メール:
 
URL:
 
非公開:  クッキーに保存: 
※非公開にチェックを入れると、管理者のみにコメントが届きます。
ブログの画面には表示されません。
captcha


※画像に表示されている文字を入力してください(半角・大文字/小文字の区別なし)。
文字が読みづらい場合はこちらをクリックしてください。
小文字 太字 斜体 下線 取り消し線 左寄せ 中央揃え 右寄せ テキストカラー リンク