Из-за чего закрывается моё приложение?

Следующий код я сделал для обработки WinApi событий(KeyDown и KeyUp). Если я пытаюсь вызвать IsKeyPressed(VK_INSERT, false), у меня закрывается приложение.

bool keyState[*(&keysCodes + 1) - keysCodes]; // true - pressed; false - not pressed;

bool keyStateSecond[*(&keysCodes + 1) - keysCodes];
int keysLength = *(&keysCodes + 1) - keysCodes;


int FindKeyIndex(DWORD key)
{

    for (int i = 0; i < keysLength; i++)
    {
        if (key == keysCodes[i])
        {
            return i;
        }
    }
    return 0;
}

void CheckInput(UINT uMsg, WPARAM wParam) 
{

    switch (uMsg)
    {
        case WM_KEYDOWN:
            for (int i = 0; i < keysLength; i++)
            {
                if (wParam == keysCodes[i])
                {
                    keyState[i] = true;
                    break;
                }
            }
            break;
        case WM_KEYUP:
            for (int i = 0; i < keysLength; i++)
            {
                if (wParam == keysCodes[i])
                {
                    keyState[i] = false;
                    if (keyStateSecond[i])
                    {
                        keyStateSecond[i] = false;
                    }
                    break;
                }
            }
            break;
        default:
            break;
    }

}

bool IsKeyPressed(DWORD key, bool repeat = true)
{

    int keyIndex = FindKeyIndex(key);
    if (repeat)
    {
        return keyState[keyIndex];
    }
    if (keyState[keyIndex] && !keyStateSecond[keyIndex])
    {
        keyStateSecond[keyIndex] = true;
        return true;
    }
    return false;
}

Ответы (1 шт):

Автор решения: Zhihar

FindKeyIndex у вас как-то странно работает - если ничего не находит, то выводит 0, а если находит значение в 0 элементе массива - тоже выводит 0

и еще - можете этот код пояснить:

*(&keysCodes + 1) - keysCodes

что вы этим добиться хотите

→ Ссылка