4

私は何年も C++ を扱っていませんでしたが、今ではテスト付きの C++ プロジェクトを作成しています。

デバッグを開始すると、変数がデフォルトでゼロで初期化されていないという奇妙なことがわかりました。たとえば、クラスの初期化されていない変数 (unsigned int) を監視すると、その値 3452816845 が期待される zeo に含まれていることがわかります...これは、単体テストでエラーを引き起こします。私はそのような初期化を使用します:

TEST_METHOD(TestPlus)
        {
            Entity* entity = new Entity();
            entity->mCreateOperator(entity->Plus);
            entity->SetContactValue(1);
            entity->SetContactValue(2);
            entity->mProcessLast();
            Assert::IsTrue(entity->GetContactValue((1+2));
        }

私はエンティティクラスのデフォルトのコンストラクタを持っています:

Entity::Entity(void)    {/*some internal array initialization*/}

new キーワードを使用すると、すべてのクラス変数が C++ ランタイムによって 0 で初期化されると考えました。

私は何かを見逃しましたか?

4

3 に答える 3

4

実際には、値3452816845(0xCDCDCDCD) は、初期化されていない変数を識別するために Microsoft のランタイムによって使用される特別な塗りつぶしパターンです。コンパイラがこれを行うのは、変数を初期化するのを忘れたときを検出できるようにするためです。この値は、有効なアドレスではなく、符号なしとして大きな数であり、「大きい」値であるため、「適切な」値として選択されました。したがって、コードでこれらの値のいずれかを使用すると、通常、何かが間違っていることに簡単に気付くことができます。ほとんどの場合、予想される範囲外です。

于 2013-09-07T15:58:41.107 に答える