重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

間違っていて正常に動かないはずなのに、
なぜか偶然正常に動くことってありますか?
また、仮に偶然正常に動いているものがあるとすると、
何かをきっかけとして動かなくなることってありますか?

A 回答 (6件)

ありますあります。



自分で書いておきながら後でバグに気がついて「よくこれで今まで動いていたよな」と思う事も良くあります。

特にマシンやOSが変わったりすると(スタックの値やタイミングが変わるので)、この手のバグは発動(!)することが多いのですが、「いままで使っていたあのマシンではちゃんと動いていたので自分のプログラムには間違いがない」とか平然と言う人がいて、閉口することもしばしばあります。

原因の多くは他の回答者さんにあるとおり、初期化ミス(特に自動(スタック)変数)、マルチスレッドやシグナル処理におけるタイミング、バッファーオーバーラン、ですが、他にもシステムコールやライブラリ関数の仕様の読み間違え、もあります。

初期化ミスやバッファオーバーフローは、OSや機種が違うとメモリ配置が変わって、動くものが動かなくなったり、その逆になったりすることがあります。タイミングに起因するバグもOSが変わるとスケジューリングの微妙な違いでバグが出現したりします。ライブラリ関数も、機種やバージョンで微妙に仕様が違うことがあるので、それで引っかかることがあります。
    • good
    • 0

ありますよ!



仕様書にはきちんと書いているんだけど、たまたま読み忘れて
コーディングをしてしまった場合。つまりテストケースからも
落ちてしまった場合に、きちんと動いた、ということはあります。
けど、結合テスト工程で欠落した部分が突如バグとして現れたりします。
    • good
    • 0

> 間違っていて正常に動かないはずなのに、


> なぜか偶然正常に動くことってありますか?

正常に動作するかどうかわからない、あるいは特定のケースで誤動作するものが、(そのとき使用している範囲では)正しく動作することというのはよくあります。
しかし、正常に動かないはず(つまり確実に誤動作することが理論的に裏付けられている)ものが、誤動作する実行パスを通ったにも関わらず、正常動作することはあり得ません。

もっとも、正常に動かないはずのものが、自分が知らないうちに手直しされていた、というケースもありますから、それらも含めると可能性はゼロではありませんね。

> また、仮に偶然正常に動いているものがあるとすると、
> 何かをきっかけとして動かなくなることってありますか?

これは、正常に動かない原因と、正常に動いたかのように見えた原因によります。
    • good
    • 0

良くあるパターンでは…



・初期値を設定していなかったのだけれど、0が設定されていて普段はきちんと動いているように見えた。
・逆に、初期値に0以外が設定されていて、判定文が素通りしていた。
・領域外にアクセスをしていたのだけれど、他の領域を食いつぶしていて動いていた。
・シビアなタイミングで競合が発生する。
・似たような変数名を使用していて、別のところで値を変更していた。
・公開したライブラリがグローバル変数を使用していて、違う関数で値を上書きされた。

こんなところでしょうか。
他にもまだまだあるとは思いますが、やはりデバッガの偉大さを思い知らされる時でもあります。
    • good
    • 0

そのプログラムというのはご自身で作成されたものですか?


もしそうであればデバッカーで追ってみてください。
結果的に処理が意図する物になっている場合もございます。

できればこう間違っているのにこう動いているという
具体的な説明をお願いします。

この回答への補足

プログラムを書いたわけではなく、
ただ気になっただけです。

補足日時:2006/09/27 00:12
    • good
    • 0

スレッドの関係、メモリの関係などなど、コードを読んでるだけでは見つからないバグはいくらでもあります。


”偶然”まともに動いているプログラムがほとんどかもしれませんね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!