为何调用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
相关产品推荐
相关产品推荐

