繁体   English   中英

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

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

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

警告 C26444

当我收到此警告时,我没有得到运行程序的预期结果。 该程序在控制台窗口上没有显示任何输出,控制台窗口只是说 - “按任意键继续...”

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

附加返回,解决问题

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

正确的输出,当我在函数前面附加 return 时

为什么我必须在函数调用前附加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 ——

StackFrame 展开过程

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

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM