对于函数调用,调用堆栈展开过程究竟是如何工作的? - C++

How does the call stack unwinding process exactly work, for function calls? - C++

我正在解决 TowerOfHanoi 问题,使用 STL (C++) 中的堆栈。但我不确定为什么我会在第 6703 行收到此警告:

当我收到此警告时,我没有在 运行 程序上获得预期的结果。该程序在控制台 window 上没有显示任何输出,控制台 window 只是说 - "Press any key to continue..."

但是,当我在第 6703 行前面放置一个 return 语句时,警告消失了,我在输出控制台上得到了正确的结果 window:

并且,以下是控制台上的输出,当我在函数调用前面附加 return 时(在第 6703 行)-

为什么我必须在函数调用前附加 return 才能使其正常工作?

如果我们查看调用堆栈,会发现创建了三个调用堆栈: 1.一个为主 2. 第二个 towerOfHanoi(stack1,stack2,stack3, 3) 3.第三个为towerOfHanoi(stack1,stack2,stack3, 2)

之后,堆栈展开过程开始 - 3. towerOfHanoi(stack1,stack2,stack3, 2) returns stack3 到 towerOfHanoi(stack1,stack2,stack3, 3) 2.现在,towerOfHanoi(stack1,stack2,stack3, 3)依次returns stack3到main()

关于堆栈展开过程的进行方式,我是否正确?而且,return 在第 6703 行是必不可少的:return towerOfHanoi(stack1, stack2, stack3, n - 1) - 因为如果它不存在,我们将无法将 stack3 return 到 main? -

你能更好地解释一下栈帧展开过程吗?

towerOfHanoi(stack1,stack2,stack3, 2) returns stack3 到 towerOfHanoi(stack1,stack2,stack3, 3) 因为

if (n == 2) {
    return stack3;
}

但是

towerOfHanoi(stack1,stack2,stack3, 3) 没有 return 任何主要内容。因为您没有在结束函数中提供 return 语句。