[英]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.