emmeter吧 关注:12贴子:75
  • 0回复贴,共1

记录一个诡异的BUG

只看楼主收藏回复


if (GUID_NULL == guidCurInfo)
return;
BOOL bGuidNotEqual = (guidCurInfo != GUID_NULL);
while (bGuidNotEqual)
{

}
Release版本下 guidCurInfo 非空 有几率直接跳过 while循环。(事实上在某个版本下是百分之百)
疑似编译器处理 BOOL赋值的时候 存在跟代码逻辑不一致的操作过程 (会不会是先赋值操作 然后才执行括号内操作?) 因为赋值操作没有初始化 因此给了一个FALSE? 不过查询运算符号优先级 发现没有疑点。
另外 别跟我计较代码逻辑:
if (GUID_NULL == guidCurInfo)
return;
是后添加的,然而没屁用……
初始的写法是
while(guidCurInfo != GUID_NULL)
此时诡异BUG第一次出现 guidCurInfo 非空 while循环不进入。
不能加入打印语句,一加入打印语句 while循环就可以进入了。
领导说可能跟线程锁有关系 个人保留意见…… 因为没发现公共资源。


IP属地:辽宁1楼2021-11-01 11:35回复