• 締切済み

DOS窓の数値計算でエラーが出たり出なかったりします

Windows98でVC6を使って,DOS窓のみで実行する数値計算(シミュレーション)のプログラムをデバッグ中です.「不正な処理.....」のエラーに対して,同じexeファイルを別のパソコン(windows98機)2台で実行させたところ,2台ともエラーが出ませんでした.ソースをUNIX機およびNT機に持って行ってコンパイル実行してもエラーが出ませんでした. こんな現象がなぜ生じるのか理解に苦しんでいます.CPUはPentiumII450MHz,メモリは128MBです. しかも, ・デバッグ用にprintf文を随所に入れると,正常動作しますし, ・逆に始めからある進行モニタ用のprintf文をコメントアウトしただけでも正常動作します。 ヒントとか,以前に似たような経験をされた方がいましたら,何でもお教えくだされば幸いです。

みんなの回答

  • shigatsu
  • ベストアンサー率26% (511/1924)
回答No.5

補足読みました。 メモリ管理方法に違いが有りますので、一概にWindowsが悪いとは言い切れませんね。 数値計算だと、計算結果を入れる変数がオーバーしてるとか、関数に渡すパラメータや 戻り値の不一致とかが考えられますね。 3000行といっても、関数ごとに切り出してテストランすればたいした量じゃないと 思うんですけど・・・ それと1台だけってことは、なんか他の2台のWindows機と違ってるところがないです かね?タイミングの問題もあるのかなぁ・・ 関係無いとは思うけど、Windowsを再インストールしてみるとか・・・問題の切り分け にはなると思います。

6Bay
質問者

補足

ojopuさん,shigatuさん何度も御回答有難う御座います。 未だ源をつかめていないのですが,何故か,安定して?エラーが出るようになりました。やはりエラーが出ると言うことは,一方的にシステムのせいにして済ますわけには行かないので,更に追いかけています。最終的に,原因が特定できましたら,また状況をご報告します。なお補足ですが,エラーの出るWindow機はWindow98で,正常に終了するのはWindow98 SecondEditionです.それと正常の方は2台ともノートパソコンです。この程度の違いです。 では,しばらく追跡をしてみます。有難う御座いました。

  • ojopu
  • ベストアンサー率0% (0/0)
回答No.4

3番の再質問の件です。 とりあえずは変数宣言を厳密に行い(shortかlongか、signedかunsignedか等)、些細なコンパイルエラーを消していくのが良いかと思います(1から作る場合はこういうエラーが出ないように組みます)。 この手のエラーはエンバグ部分と停止部分が違う場合が殆どですのでソースを見るかより厳密なデバッガを使うのが良いのでしょう。 なお、処理系により変数の内部構造が違うケースもありますので「UNIXの仕様としては正しい」ソースも有りうるでしょう。構造の違いに関してはVCのオンラインマニュアルにもある程度書かれていたと記憶しています(3年程前の記憶ですが^^;)。 蛇足ですがどの処理系でも動くソースを書くのは難しいですが偶発性に拠らない正確なソースを書けるように成ると思います。

  • shigatsu
  • ベストアンサー率26% (511/1924)
回答No.3

VCといっても、コンソールアプリってことはいわゆるCで書かれているんですよね? ojopuさんもおっしゃってる通りprintfで動作が変わるって事は、メモリ管理部分で なんかバグが潜んでいるんでしょうね。 領域確保が正しく行われているかどうか、オート変数がちゃんと初期化されているか 実体とポインタが正しく扱われているかなんかがチェックポイントでしょうね。 あとは、printf入れることで最適化の方法が変わったりしますので、それによって バグが出る場合もありますね。

6Bay
質問者

補足

皆さん,アドバイス有難う御座います。そして,shigatsuさん,前回のSCSIの時も有難う御座いました。あれ以来全くハングアップしなくなりました。 さて,今回頂きましたアドバイスについて,重ねてお聞きしたいのですが, ・今まではprintf文でバグを追っかけていたのですが,今回のようにこれが使えない状況では,リストを眺めるしか手は無いのでしょうか?3000行位なので,ちょっと気が重いです。 ・ソースファイルをUNIXマシンでコンパイル実行すると正常に完了するのですが,ソースファイルは正しくて,使用しているWindows機の方に問題がある,と言ってしまってはいけないでしょうか?

  • ojopu
  • ベストアンサー率0% (0/0)
回答No.2

printfの有無で動作が異なる場合は各変数のメモリ確保、アクセス範囲をチェックした方が良いです。 まさかないとは思いつつも私も過去同じような現象発見、解決したbugに見舞われた事が有りましたので念の為....

回答No.1

(1)プログラム実行をWINDOWSに検知させない設定にする。 (2)DOSで動かすプログラムの優先度を最大にする。 など、やってみられました?

関連するQ&A