未初始化的DWORD变量给出随机值?

时间:2012-09-21 08:39:38

标签: c variables

  

可能重复:
  Uninitialized values being initialized?

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

有人对此有解释吗? {{1}}变量在未分配显式值时是否获得随机值?

4 个答案:

答案 0 :(得分:5)

它不会“变得”随机。当你声明你的DWORD之前,它的地址中有任何内存。除非您将内存初始化为某些内容(例如0),否则内存不会清除

答案 1 :(得分:4)

您永远不会初始化您只增加它的值。因此,它最初将具有最后写入的任何值。

如果你有:

DWORD asciiKeyValue = 0; // Or any other value

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

答案 2 :(得分:4)

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

DWORD asciiKeyValue = 0;

这将产生可预测的结果。

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

答案 3 :(得分:1)

曾经听说初始化变量。那么你现在有:-)

DWORD asciiKeyValue = 0 ;

将解决您的问题。