-PR-
締切り
済み

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

  • 暇なときにでも
  • 質問No.2692
  • 閲覧数177
  • ありがとう数18
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 9% (3/31)

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

回答 (全5件)

  • 回答No.1
レベル8

ベストアンサー率 3% (1/28)

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

ベストアンサー率 0% (0/0)

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

ベストアンサー率 26% (511/1924)

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

お礼率 9% (3/31)

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

ベストアンサー率 0% (0/0)

3番の再質問の件です。 とりあえずは変数宣言を厳密に行い(shortかlongか、signedかunsignedか等)、些細なコンパイルエラーを消していくのが良いかと思います(1から作る場合はこういうエラーが出ないように組みます)。 この手のエラーはエンバグ部分と停止部分が違う場合が殆どですのでソースを見るかより厳密なデバッガを使うのが良いのでしょう。 なお、処理系により変数の内部構造が違うケー ...続きを読む
3番の再質問の件です。
とりあえずは変数宣言を厳密に行い(shortかlongか、signedかunsignedか等)、些細なコンパイルエラーを消していくのが良いかと思います(1から作る場合はこういうエラーが出ないように組みます)。
この手のエラーはエンバグ部分と停止部分が違う場合が殆どですのでソースを見るかより厳密なデバッガを使うのが良いのでしょう。

なお、処理系により変数の内部構造が違うケースもありますので「UNIXの仕様としては正しい」ソースも有りうるでしょう。構造の違いに関してはVCのオンラインマニュアルにもある程度書かれていたと記憶しています(3年程前の記憶ですが^^;)。

蛇足ですがどの処理系でも動くソースを書くのは難しいですが偶発性に拠らない正確なソースを書けるように成ると思います。
  • 回答No.5
レベル13

ベストアンサー率 26% (511/1924)

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

お礼率 9% (3/31)

ojopuさん,shigatuさん何度も御回答有難う御座います。
未だ源をつかめていないのですが,何故か,安定して?エラーが出るようになりました。やはりエラーが出ると言うことは,一方的にシステムのせいにして済ますわけには行かないので,更に追いかけています。最終的に,原因が特定できましたら,また状況をご報告します。なお補足ですが,エラーの出るWindow機はWindow98で,正常に終了するのはWindow98 SecondEditionです.それと正常の方は2台ともノートパソコンです。この程度の違いです。
では,しばらく追跡をしてみます。有難う御座いました。
投稿日時 - 0000-00-00 00:00:00
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ