簡體   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