我不知道为什么,但是下面的这段代码在64位编译时在 Debug模式下出现此错误:



但是,它在 Release模式下运行良好,并且在以32位编译时可以进行调试和发布!非常感谢您的帮助。

我正在使用Visual Studio 2010。

float g_History[20] = { 0.0f };
const float g_WeightModifier = 0.25f;

void CInput::SmoothMouseMovement()
{
    if(!m_SmoothMouse) return;

    for(UINT i = 0; i < 10; i++)
    {
        g_History[i * 2] = g_History[(i - 1) * 2]; // This line gives the error
        g_History[i * 2 + 1] = g_History[(i - 1) * 2 + 1];
    }

    g_History[0] = m_MouseState.X;
    g_History[1] = m_MouseState.Y;

    float AverageX = 0.0f;
    float AverageY = 0.0f;
    float AverageTotal = 0.0f;
    float WeightModifier = 1.0f;

    for(UINT i = 0; i < 10; i++)
    {
        AverageX += g_History[i * 2] * WeightModifier;
        AverageY += g_History[i * 2 + 1] * WeightModifier;
        AverageTotal += 1.0f * WeightModifier;
        WeightModifier *= g_WeightModifier;
    }

    m_MouseState.X = AverageX / AverageTotal;
    m_MouseState.Y = AverageY / AverageTotal;
}

最佳答案

第一次通过循环,g_History[(i - 1) * 2]将与g_History [-2]等效,这显然是错误的访问。这与32v64和debug v release如何安排内存只是巧合。无论您的应用程序是否崩溃,该行都是错误。

关于c++ - Debug模式下未处理的异常,但在发行版中工作正常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8691523/

10-10 21:21