C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: OSやデバックモードとリリースモードでのboolの動きの違い


(過去ログ 77 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■45680 / inTopicNo.1)  OSやデバックモードとリリースモードでのboolの動きの違い
  
□投稿者/ tonton (1回)-(2010/01/18(Mon) 21:06:21)

分類:[C/C++] 

VC++6.0を使用しています。デバック環境はXPのみです。
コンパイルしたexeを動かす環境はWin2000、2003、XP、Vistaと様々です。

当初ループ処理で
bool lp;

while(lp) {
//ここに色々しょりがあって

//抜ける処理だけ抜粋
lp = false;
}

などとやっていて特にデバックモード、リリースモードのexeどちらもWin2003、XP、Vistaでは
うまく動いていました。
ところがWin2000でリリースモードのexeのみループ処理に入らなくなり、
おや?と思い、初期化かな?と思って、
bool lp; ⇒ bool lp =true;
に変更しましたが駄目で、結局boolをintにして
int lp = 1;
抜ける時は
lp = 0;
としてうまく動くようになりました。
ただ、なぜOSによって動く動かないが同じコンパイラなのにあるのか、
リリースモードだと動かないのかが気持ち悪くて・・・
どなたかご存知でしょうか?
また今後Windows7ではこのコードで大丈夫でしょうか?
引用返信 編集キー/
■45704 / inTopicNo.2)  Re[1]: OSやデバックモードとリリースモードでのboolの動きの違い
□投稿者/ 774RR (458回)-(2010/01/19(Tue) 07:13:04)
結論から言えば、
・バグっているプログラムがプログラマの勝手な期待通りに動作するわけがない(OSによらず)
ということだ。

Release モードでは自動変数を初期化しない際にどんな値が入っているかは不明なので
bool lp; // true になるか false になるかは不明
while (lp) { ... }
が誤動作するのはあたりまえ。単にこのプログラム断片がバグっているだけ。

Debug モードでは関数の入口処理に自動変数領域を 0xCC に初期化するデバッグコードが追加されるので
自動変数の内部表現は 0xCC/0xCCCCCCC 等になり bool なら初期値 true になるはずだ。
遅くなっている代わりに誤動作しづらくなっているわけだ。

bool で期待通りでなく int で期待通り、ってのはたぶん別のバグがどこかに隠れているだけだと思うぞ。

引用返信 編集キー/
■45705 / inTopicNo.3)  Re[1]: OSやデバックモードとリリースモードでのboolの動きの違い
□投稿者/ .SHO (1136回)-(2010/01/19(Tue) 08:24:02)
No45680 (tonton さん) に返信

> bool lp; ⇒ bool lp =true;
> に変更しましたが駄目で

これは通るはずですね。
多分、何か直し間違ってると思います。

引用返信 編集キー/
■45709 / inTopicNo.4)  Re[2]: OSやデバックモードとリリースモードでのboolの動きの違い
□投稿者/ tonton (3回)-(2010/01/19(Tue) 10:20:54)
すいません、boolでも初期化コード入れた場合は動作しました。

あくまでリリースモードの場合、初期化処理を入れない場合は
何がセットされているか不明って事ですね。
XP、2003、Vistaは「たまたま」動いてただけと・・・

デバックモードとリリースモードの違いはよくわかりました。
ありがとうございました。

引用返信 編集キー/
■45710 / inTopicNo.5)  Re[3]: OSやデバックモードとリリースモードでのboolの動きの違い
□投稿者/ tonton (4回)-(2010/01/19(Tue) 10:21:56)
解決済です・・・
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -