碰上灵异事件了? 请高手帮忙~~

jingtan jingtan 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
一段在debug版下正常,但在release版下会偶然出现异常的代码.


bool MyNetMsgReceiver::onRecviveUdpMsg(UdpSocket* sock, char* msg, int length, sockaddr_in* fromAddr)
{
//DWORD temp[16] = {0};
ULONG data = sock->getUserData();
if (!data) return true;

if ((DWORD)msg < 0x1000)
{
__asm int 3h; //在这里的时候msg的值还是正常的
}

IMAccount* acc = g_ImAccMgr.getAccountObject(data);

if ((DWORD)msg < 0x1000)
{
__asm int 3h; //程序停在这里,此时mag的值被修改为0x10, 变成了一个错的指针
}

if (acc)
{
acc->handleUdpPacket(sock, msg, length, fromAddr);
}

return true;
}

//g_ImAccMgr.getAccountObject() 的代码


IMAccount* IMAccountMgr::getAccountObject(size_t objId)
{

IMAccount* acc = NULL;

EnterCriticalSection(&mCs);
AccountIter it = tbl.begin();
for (; it != tbl.end(); ++it)
if ((*it)->getObjeciId() == objId)
{
acc = (*it);
break;
}

LeaveCriticalSection(&mCs);
return acc;
}


是个随机性的错误, 程序运行几分到半个小时后才会触发 int 3h挺下来.
开始我以为是哪里的指针或数据越界了. 于是在函数里面加了个 DWORD temp[16]={0};

但是 msg 还是被准确的改为0x10了, 其他参数都没问题.

这段代码逻辑简单, 其他线程就算出错也不会修改到线程堆栈里面的内容.
真搞不懂了..
...全文

相关推荐

评论 20
收藏 已收藏
分享
返回顶部
jingtan
C++ 语言 65,214 成员 250,514 内容