1

可能重复:
未初始化的值正在初始化?

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);
}

我被淘汰了430when DWORD asciiKeyValue,但一次DWORD asciiKeyValue = 0230应该的。

有人对此有解释吗?当asciiKeyValue变量没有分配显式值时,它是否会得到一个随机值?

4

4 回答 4

5

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

于 2012-09-21T08:41:15.600 回答
4

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

如果你有:

DWORD asciiKeyValue = 0; // Or any other value

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

于 2012-09-21T08:41:18.337 回答
4

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

DWORD asciiKeyValue = 0;

这将产生可预测的结果。

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

于 2012-09-21T08:44:53.303 回答
1

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

DWORD asciiKeyValue = 0 ;

将解决您的问题。

于 2012-09-21T08:45:24.170 回答