对于函数调用,调用堆栈展开过程究竟是如何工作的? - 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 语句。
我正在解决 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 语句。