※ 引述《youtuuube000 (小孩)》之銘言:
: 開發平台(Platform): (Ex: Win10, Linux, ...)
: linux
: 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
: GCC
: 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
: 無吧(?
: 問題(Question):
: 各位好
: 我想要問一下
: 若在一般function宣告變數的話(e.q. int a=0;)
: 我知道隨著function結束執行return後 變數的記憶體也就會被釋放了
這是因為function被呼叫時,這些變數會被push到stack裡
而return後,則會被pop出來,也就是你所說的被釋放
: 但若是在main裡面宣告的話
: 此變數不就會一直保留著他的記憶體
: 而要等到程式結束後他才會被清空嗎?
是的,這是因為main本身也是一個function
只是他是第一個被呼叫的function
所以他最後才被pop,也就是你所說的程式結束
這是stack的特性,先進後出
: 但為什麼一般都沒有設計清空在main裡面宣告變數記憶體的機制呢?
會清空啊
同上所述,因為main是function,當他被return時
所有宣告的變數就會被pop出來
: 但malloc卻一定要強調要用free來清空呢?
: malloc宣告的變數不也會隨著程式結束後就被清空了嗎?
: 為什麼要強調一定要用free呢?
不是喔,malloc的變數不會隨著程式結束被清掉
如果沒有free掉,他會一直佔著記憶體,直到你重開機
而malloc的變數存放的地方稱作heap
建議你找本資料結構的書,看一下什麼是stack跟heap
就會有概念了
: 我知道在其他function定義的malloc一定要用free不然會有memory leak
: 但在main裡面宣告的malloc的變數都要強調要用free
: 為什麼int a=0;在main裡面卻不用釋放記憶體呢?
: 先謝謝回答了