2017-11-22 6 views
-6

私はこれが起こる理由もそれを避ける方法も見つけられませんでした。C++ - whileループの後に変数をクリアするには?

C++では、whileループごとにのみ動作する一時変数を宣言しようとしていますが、この終了後に破棄されるはずです。

私はこのようなものがあります:最初のループでは

#include <iostream> 

int main() { 
    while (foo) { 
     float SampleVariable; 
     ... 
     std::cout << SampleVariable << std::endl; 
     ... 
     SampleVariable = 20; 
    } 
    return 0; 
} 

を、SampleVariable出力値が5.8825e-39です。 2番目以降のループでは、SampleVariableの出力値は20です。最初のループでは

+1

未定義の動作 –

+5

ループの先頭に*を付け、終わりではない値を与えることになっています。とにかく、ループの終わりに変数が破棄されても、コンパイラはその都度変数に同じバイトを使用する可能性が高いです(これが最も簡単な方法です)。 –

+0

whileループの本体の中で初期化されていない変数を扱うと、あなたが見るものは_undefined behavior_です。私は私の猫が猫を飼うかどうか調べるために私のワードローブに行くだろう。ああ待って、私は猫がありません: - P ... – user0042

答えて

2

コンピューティングでは、何かが破壊されたときに0またはいくつかの魔法の値に設定されていないことを理解する必要があります。次のプロセスが来たら、単に上書きされるように設定されています。

ループでは、SampleVariableは初期化されていませんでした。最初の反復では、以前にあったものは何でもあります。次の数回の反復では、偶然(実際にはそうではないにしても)あなたのフロートがメモリ内の同じ場所に割り当てられていたので、それは過去の繰り返しにあったものです。

float SampleVariable = 0.f; 

のようなあなたの変数を初期化し、あなたのstd::coutは0毎回が印刷されます。

+0

/OTああ、曖昧な_クローン;-) – user0042

+0

ここには何もない**削除**。ブロックの終わりに 'SampleVariable'が**破棄されます**。 –

+0

注目、編集済み。 – PhotometricStereo

1

それは

でなければなりませんよう、SampleVariable出力値は、5.8825e-39ある実際どの出力は、あなたがオブジェクトにアクセスすることにより、UBを起動しているので、「それがどうあるべきか」です比喩的価値。変数をクリアする方法はありません。ループごとに、その状態は「不確定」にリセットされます。つまり、任意の値が適用可能です。あなたはそれを "リセット"しようとするのを断念すべきです。

関連する問題