4

非常に奇妙なケースが私に起こりました.デバッガを使用しているときに、ブール変数の値true0

このバグを修正するにはどうすればよいですか? これは環境バグなので、コード例を公開しても意味がありません。(隠された迷惑なメモリ管理のバグが原因ではないでしょうか?) そして、このコンテキストで、私の環境が適切に構成されていないことに気付くと驚かれることを指摘したいと思います (私はこのプロジェクトに取り組んでいます環境で 1 年以上)。

これまでのところ:

  • プロジェクトのプロパティで、コンパイラがコードに最適化を行わないことを再確認しました。
  • ビジュアルスタジオを再度開いて、プロジェクトをクリーンアップして再構築しようとしました
  • Webで解決策を検索しました(何も見つかりませんでした)。Visual Studio 2010 を使用しており、プログラミング言語は C++ です。

コードシェアのお申し込みについて:

申し訳ありませんが、コードを公開することはできません (私の上司は、Web で実行されるのを見て喜んでいないでしょう)...問題の考えられる理由についていくつかのアイデアを提供できれば、それは素晴らしいことです.そして、これらの理由が本当に問題を引き起こしているかどうかを確認するために、自分でコードの手がかりを探します。ただし、明確にするために、私が苦労しているいくつかのコード行を次に示します。

    bool dir = getNode(location)->getNext()->getDirection(); //dir is displayed as "true" in the debbuger
    int toPush = (dir == 1) ? 1 : 0; //"toPush" is displayed as "0" in the debbugger
    cout<<dir<<endl; //both output 0.
    cout<<(dir == true)<<endl;

リクエストに応じて、スクリーンショットを添付します。画面の右端で「true」として表示される「dir」の値と、右側のプログラム出力の値が 0 で終わることに注意してください (「cout<< dir」コマンドに対応)。

スクリーンショット

4

1 に答える 1

3

値の真偽==をテストするために演算子を使用しないでください。boolゼロ以外の値は真です。2coutつの行があり、コンソール ウィンドウの最後の 2 行には 240 と 0 が表示されています。

#include <iostream>

using namespace std;

static bool getDirection()
{
    union forceBoolValue
    {
        unsigned int iValue;
        bool bValue;
    };
    forceBoolValue retValue;
    retValue.iValue = 0xFFFFFFFF;
    return retValue.bValue;
}

int _tmain(int argc, _TCHAR* argv[])
{
    bool dir = getDirection();  //dir is now 255*, which is non-zero and therefore "true"
    int toPush = (dir == 1) ? 1 : 0;  //dir may be true but it is not one, so toPush is 0
    int toPush2 = dir ? 1 : 0;  //dir is true, so toPush2 is 1
    cout << "Dir: " << dir << endl;
    cout << "toPush: " << toPush << endl;
    cout << "toPush2: " << toPush2 << endl;
    return 0;
}

同様のことがdir == true、1 の値を再度テストしている場合にも発生します。コードで が異常な値 (240) を取得する理由dirはわかりませんが、比較を削除して値をテストするだけで (toPush2上記のように)、問題が解決するはずです。

この行は問題を示すためだけのものだとおっしゃってtoPushいましたが、実際のコードで比較を行っていますか? その場合は、それらを削除してください。

※お使いの環境dirのサイズによっては255にならない場合がありboolます。

于 2012-11-26T00:08:07.217 に答える