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

为何调用Execute(2, mem)后函数陷入无限循环?

问题分析与修复方案

问题根源

你的代码中FetchByte函数的Cycles参数采用值传递,函数内部操作的是传入参数的副本,而非Execute函数里的原始变量。因此FetchByte里的Cycles--只会修改副本的值,完全不会影响Execute中while循环判断用的那个Cycles,导致循环条件永远为true,陷入无限循环。

修复代码

将FetchByte的Cycles参数改为引用传递,让函数内部的修改直接作用于原始变量:

using u32 = unsigned int;

Byte FetchByte(u32& Cycles, Mem& memory) { // 添加&改为引用传递
        Byte Data = memory[PC];
        PC++;
        Cycles--;
        return Data;
    }
void Execute(u32 Cycles, Mem& memory) {
    while (Cycles > 0) {
        Byte Instruction = FetchByte(Cycles, memory);
        (void)Instruction;
    }
}

补充说明

  • 值传递会创建参数的独立副本,副本的修改与外部变量无关;引用传递则是操作原始变量的别名,修改会同步到外部。
  • 你调试时看到的“Cycles未被减少”,指的是Execute里的原始变量,而FetchByte里的副本其实是有递减的,只是这个变化没有传递回去。

内容的提问来源于stack exchange,提问作者huud-e

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:19:50