[英]How does the call stack unwinding process exactly work, for function calls? - C++
我正在解决 TowerOfHanoi 问题,使用 STL (C++) 中的堆栈。 但我不确定为什么我会在第 6703 行收到此警告:
当我收到此警告时,我没有得到运行程序的预期结果。 该程序在控制台窗口上没有显示任何输出,控制台窗口只是说 - “按任意键继续...”
但是,当我在第 6703 行前面放一个 return 语句时,警告消失了,我在输出控制台窗口上得到了正确的结果:
并且,以下是控制台上的输出,当我在函数调用前附加return
时(在第 6703 行) -
为什么我必须在函数调用前附加return
才能正常工作?
如果我们查看调用堆栈,会创建三个调用堆栈: 1. 一个用于 main 2. 第二个用于towerOfHanoi(stack1,stack2,stack3, 3)
3. 第三个用于towerOfHanoi(stack1,stack2,stack3, 2)
之后,堆栈展开过程开始 - towerOfHanoi(stack1,stack2,stack3, 2)
将stack3 返回给towerOfHanoi(stack1,stack2,stack3, 3)
2. 现在, towerOfHanoi(stack1,stack2,stack3, 3)
依次返回stack3 到main()
我对堆栈展开过程的进行方式是否正确? 并且,在第 6703 行 return 是必不可少的: return towerOfHanoi(stack1, stack2, stack3, n - 1)
- 因为如果它不存在,我们将无法将 stack3 返回到main
? ——
你能更好地解释一下堆栈帧展开过程吗?
TowerOfHanoi(stack1,stack2,stack3, 2) 将 stack3 返回到 TowerOfHanoi(stack1,stack2,stack3, 3) 因为
if (n == 2) {
return stack3;
}
但
TowerOfHanoi(stack1,stack2,stack3, 3) 不返回任何东西给 main。 因为你没有在 end 函数中提供 return 语句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.