2012-09-21 124 views
1

可能重複:
Uninitialized values being initialized?未初始化的DWORD變量賦予隨機值?

void Encrypt(FileContent *pFile) 
{ 
    /* Get the key total ascii value */ 
    DWORD asciiKeyValue; 

    for (DWORD i=0; i < pFile->keyLength; i++) 
    { 
     asciiKeyValue += pFile->encKey[i]; 
    } 

    _tprintf(_T("[*]DEBUG The encKey ascii value is: %ld\n"), asciiKeyValue); 
} 

我得到了放430DWORD asciiKeyValue,但一旦DWORD asciiKeyValue = 0230這是理所應當的。

有人對此有解釋嗎?如果asciiKeyValue變量未分配明確的值,它是否會得到一個隨機值?

回答

5

它不會「變得」隨機。當你聲明你的DWORD它有任何內存在它的地址之前。內存不是清除,除非你初始化它(像你的0)。

4

你永遠不會初始化你只增加它的值。因此,它最初將具有最後寫入它的任何價值。

如果您有:

DWORD asciiKeyValue = 0; // Or any other value 

然後你會得到一致的結果。

4

您不初始化asciiKeyValue。與其他語言一樣,值不會隱式地初始化爲0。您需要明確設置您的初始值。我希望你的代碼是:

DWORD asciiKeyValue = 0; 

這將產生可預測的結果。

這就像你從商店買了一個新的相框,你正在添加油漆。最後,你可能會問:「爲什麼有一對幸福夫妻的毀容圖片?我沒有畫出來!」解決方案是用空白畫布替換默認的隨機照片。

+0

喜歡你的框架畫圖的例子。 – Abhineet

+0

_Automatic_存儲時間變量不會被初始化。其他人(如靜態存儲)也可以。 – paxdiablo

+0

確實;實際上現在我想到了這一點,很難總結變量何時初始化以及何時變量未初始化。但實際上,幾乎總是如果你依賴初始化,你應該明確地初始化。 (好吧,現在我正在通過我腦海中的例外......) – tenfour

1

曾聽說過初始化變量。那麼你現在有:-)

DWORD asciiKeyValue = 0 ; 

將解決你的問題。