堆栈 Cookie 检测代码检测到基于堆栈的缓冲区溢出(在一个函数结束末尾花括号报错)

堆栈 Cookie 检测代码检测到基于堆栈的缓冲区溢出(在一个函数结束末尾花括号报错)
如下图:
报错
经检查,没有常见的数组访问越界问题
将栈变量申请为堆变量解决问题:

void _buttonEvent(vrinputemulator::ButtonEventType eventType,uint32_t deviceId, vr::EVRButtonId buttonId, uint32_t holdTime) {
	bool noHold = false;
	if (eventType == vrinputemulator::ButtonEventType::ButtonPressed || eventType == vrinputemulator::ButtonEventType::ButtonTouched) {
		noHold = true;
	}
	
/***************************************************************/
/***************************************************************/
/*********************症结症结症结症结症结症结*********************/
vrinputemulator::VRInputEmulator inputEmulator;
/*********************症结症结症结症结症结症结******************/
/***************************************************************/
/***************************************************************/

	inputEmulator.connect();
	printf("button connect\n");
	inputEmulator.openvrButtonEvent(eventType, deviceId, buttonId, 0.0);
	printf("inputEmulator.openvrButtonEvent\n");
	if (noHold) {
		std::this_thread::sleep_for(std::chrono::milliseconds(holdTime));
		if (eventType == vrinputemulator::ButtonEventType::ButtonPressed) {
			eventType = vrinputemulator::ButtonEventType::ButtonUnpressed;
		}
		else {
			eventType = vrinputemulator::ButtonEventType::ButtonUntouched;
		}
		inputEmulator.openvrButtonEvent(eventType, deviceId, buttonId, 0.0);
		printf("inputEmulator.openvrButtonEvent\n");
	}
	inputEmulator.disconnect();
	printf("disconnect\n");
}

改为:

void _buttonEvent(vrinputemulator::ButtonEventType eventType,uint32_t deviceId, vr::EVRButtonId buttonId, uint32_t holdTime) {
	bool noHold = false;
	if (eventType == vrinputemulator::ButtonEventType::ButtonPressed || eventType == vrinputemulator::ButtonEventType::ButtonTouched) {
		noHold = true;
	}
	vrinputemulator::VRInputEmulator* inputEmulator = new vrinputemulator::VRInputEmulator;
	inputEmulator->connect();
	printf("button connect\n");
	inputEmulator->openvrButtonEvent(eventType, deviceId, buttonId, 0.0);
	printf("inputEmulator.openvrButtonEvent\n");
	if (noHold) {
		std::this_thread::sleep_for(std::chrono::milliseconds(holdTime));
		if (eventType == vrinputemulator::ButtonEventType::ButtonPressed) {
			eventType = vrinputemulator::ButtonEventType::ButtonUnpressed;
		}
		else {
			eventType = vrinputemulator::ButtonEventType::ButtonUntouched;
		}
		inputEmulator->openvrButtonEvent(eventType, deviceId, buttonId, 0.0);
		printf("inputEmulator.openvrButtonEvent\n");
	}
	inputEmulator->disconnect();
	printf("disconnect\n");
}

解决问题

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值