相同的线程,debug和release出现不同执行结果,release现象诡异

weixin_42359982 2021-04-08 10:01:15

void StartDUTThread(int iDut)
{
//CString strTemp;
//AfxMessageBox(_T("1"));
int index = threadReq[iDut-1].index;
g_iThreadResult[iDut-1] &= threadReq[iDut-1].currentFunc(iDut,index);
g_bThreadEnabled[iDut-1] = false; //通知主线程已执行完任务

if (!g_iThreadResult[iDut-1]||bIsStop[iDut-1])
{
EndDutThread(iDut,index);
}
}



如上面这段函数,我总共有4个线程,每个线程会去同时调用这个函数,debug模式下:这个函数可以正常运行完成;release模式下:这个函数会进行不下去,比如我把 ”AfxMessageBox(_T("1")); ”的注释取消掉,不会弹框,说明函数可能没进来。但我把 “CString strTemp; ”前的注释拿掉,这个函数就能正常运行完成了。我试过把“CString strTemp; ”改为其他类型,比如int, BOOL等,函数都不能执行。目前就发现加一句CString类型的变量声明就可以执行下去了。好奇怪呀!有大佬能解答吗?
...全文
205 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
GKatHere 2021-04-08
  • 打赏
  • 举报
回复
表面看来是栈被改写了。 CString strTemp; 未使用的情况下,在release栈上留有空间,不会被优化掉。 int t[n]; 未使用的情况下,在release栈上不留空间,会被优化掉。 栈改写的情况下,那么很可能iDut参数被改写了,检测下吧。
flying_music 2021-04-08
  • 打赏
  • 举报
回复
你描述的现象应该是触发了某种未定义行为,多线程的话估计是全局变量的问题吧,可以先减少线程数量,然后打断点看一下

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧