数组的前4个丢失是什么原因

C++语言 码拜 7年前 (2017-04-24) 933次浏览
本人编的软件,键盘输入“ESC”“1”和“2”都失灵,其他键没问题,研究半天
发现问题出在下面
char keys[256]
…….
…….
//将键盘获取到的信息放入keys[]数组中,
if (!SUCCEEDED(dikeyboard->GetDeviceState(sizeof(keys), (LPVOID)&keys)))
dikeyboard->Acquire();
//当本人把这个测试键入的语句放到这里就没任何问题
if (keys[DIK_1] & 0x80)
gameover = true;    //退出程序
for (int i = 0; i< 4; i++)   //这是一堆与键盘输入毫不相干的代码
{
ZeroMemory( &controllers[i], sizeof(XINPUT_STATE) );
XINPUT_STATE state;
DWORD result = XInputGetState( i, &state );
if (result == 0) controllers[i] = state.Gamepad;
}
//当本人把测试键入的语句放到这里就失灵了,同理程序其他地方也就失灵,但只有ESC、1、2 这三个键失灵
//原因是这三个键分别在keys[1]  keys[2]  keys[3] 里,显然是keys[]数组的这三个丢失,keys[0]似乎没有代表的按键,不好测试。
if (keys[DIK_1] & 0x80)
gameover = true;    //退出程序
本人买的书配的参考电子资料里有相同的代码模板,但是却没有这个问题,
这是什么怪事?
解决方案

80

检查能否有越界操作覆盖了,或单步调试跟踪看是在哪发生了变化

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明数组的前4个丢失是什么原因
喜欢 (0)
[1034331897@qq.com]
分享 (0)