在调试模式下未处理的异常,但在发布中工作正常

Unhandled exception in debug mode but works fine in release

本文关键字:布中 工作 异常 模式 调试 未处理      更新时间:2023-10-16

我不知道为什么,但是下面的代码在64位编译时在调试模式下给出了这个错误:

OpenGL.exe中0x000000013f488f55的未处理异常:0xC0000005:读取位置0x000000053f4d9778.

然而,它在发布模式下工作得很好,在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和调试v版本的内存安排上的巧合。无论你的应用程序是否崩溃,这一行都是一个错误。