假設我定義了一個能構建動態鏈表的函數,它能返回一個頭指針,我在主函數中返回值賦給同類型指針。
為什么在主函數中能輸出所有節點?函數調用后,分配的動態存儲空間不是沒有了嗎。求解釋,謝謝
2 回答
已采納

新_day_day_new
TA貢獻18條經驗 獲得超6個贊
c中全局變量是存放在棧中,在程序結束時釋放存儲空間。函數中的形式參數和非static修飾的參數都是在動態存儲區中。它們在函數開始是被分配空間結束時釋放其空間。而用malloc等函數分配的空間由用戶需要時調用malloc動態分配并且由用戶自己釋放或者在整個程序結束時釋放。所以說雖然你是在函數中申請的空間但是不會隨函數結束而導致存儲空間被釋放。因為你沒有在函數里人為釋放。所以你返回的頭指針依然指向一個存在的空間,在主函數里還能輸出節點。

望遠
TA貢獻1017條經驗 獲得超1032個贊
這是堆??臻g分配的區別: 1、棧:由操作系統自動分配釋放?,存放函數的參數值,局部變量的值等。其操作方式類似于數據結構中的棧; 2、堆:?一般由程序員申請內存,也要由程序員釋放,而通過malloc申請的內存就屬于堆內存。
- 2 回答
- 1 關注
- 1804 瀏覽
添加回答
舉報
0/150
提交
取消