私が取り組んでいたプログラムのバグに気づき、コードを抽出しました。これは基本的にはこれです。
それは無限ループで署名したint型と結果と符号なしの比較を行います。C++符号なし無限ループ比較バグ
#include <iostream>
int main()
{
unsigned int i = 0;
while (i < 1000000)
{
printf("%o\n", i);
++i;
}
return 0;
}
私が代わりにこれを使用してみました:
私は署名/符号なしの比較を修正するだろうと思った#include <iostream>
int main()
{
unsigned int i = 0;
while (i < 1000000u)
{
printf("%o\n", i);
++i;
}
return 0;
}
をし、それはまだ無限ループに当たっています。だから、私はunsigned intにダイキャストしようとしましたが、サイコロは無限ループです。
Visual Studio 2015を使用すると、完全な最適化がリリースされます。
あなたはそれが無限ループだと確信していますか?これは私にとって非常に長いループのように見えます。特に印刷にはかなりの時間がかかります。 'i + = 1000'に変更して、終了条件が機能するかどうかを確認してください。 – dasblinkenlight
これは、符号付き/符号なし比較の問題ではありません。値 '1000000'は両方の範囲にあり、これが理由であると仮定して問題を解決しようとしましたが、機能しませんでした。 – AhmadWabbi
なぜ#include 'ですが、' printf'を使用しますか? –
dxiv