You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改C++代码第48行判断条件为大于后触发无限循环,求原因

程序修改条件后进入无限循环的原因

问题背景

原C++代码通过while(leaves(n))循环迭代处理特定叶子节点,当把循环体内第48行的判断条件从strength[i] < strength[0]改为strength[i] > strength[0]后,程序陷入无限循环。

核心原因

问题出在循环终止条件与循环体逻辑完全脱节:

  • 控制循环是否继续的leaves()函数未同步修改,它仍然在检查是否存在「未被移除(otm[i]==1)的叶子节点(past[i]==0)且strength[i] < strength[0]」,只要存在这类节点,就返回true让循环持续执行。
  • 但修改后的循环体,仅处理「strength[i] > strength[0]」的叶子节点,完全不会触碰那些strength[i] < strength[0]的叶子节点。

一旦运行时存在满足otm[i]==1 && past[i]==0 && strength[i] < strength[0]的节点:

  1. leaves()返回true,触发while循环;
  2. 循环体内找不到符合新条件的节点,otm和past数组完全没有变化;
  3. 下一轮循环时,leaves()依然会检测到相同的节点并返回true,循环无限重复。

典型场景

比如输入中存在一个叶子节点,其strength值小于根节点(strength[0])且未被标记移除:

  • leaves()始终判定有需要处理的节点,让循环持续运行;
  • 但循环体只处理strength更大的节点,对该节点完全不做处理;
  • 最终程序陷入死循环,无法退出while逻辑。

内容的提问来源于stack exchange,提问作者Yuri Korostelev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 18:14:51