未初始化的 DWORD 变量给出随机值? [重复]

问题描述 投票:0回答:4
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);
}

430
时,我得到
DWORD asciiKeyValue
的输出,但一旦
DWORD asciiKeyValue = 0
230
,这是应该的。

有人对此有解释吗?当

asciiKeyValue
变量没有分配显式值时,它是否会获得随机值?

c variables
4个回答
5
投票

它不会“变得”随机。当你声明你的

DWORD
时,它就拥有了之前内存中的所有内容。除非您将内存初始化为某个值(例如 0),否则内存不会被“清理”。


4
投票

如果你有:

DWORD asciiKeyValue = 0; // Or any other value

然后你会得到一致的结果。


4
投票
asciiKeyValue

。值不会像其他语言那样隐式初始化为 0。您需要明确设置起始值。我希望你的代码是:


DWORD asciiKeyValue = 0;

这将产生可预测的结果。

就像您从商店购买了一个新相框,然后在上面添加油漆。最后你可能会问“为什么会有一张毁容的幸福情侣图?那不是我画的!”解决方案是用空白画布替换默认的随机照片。


1
投票
变量初始化

。好吧,你现在有了:-) DWORD asciiKeyValue = 0 ;

将解决您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.