1樓:匿名使用者
從記憶體開始跟你說起
記憶體為資料區 **區
資料區又分為 棧區 靜態區 堆區
棧區 是函式呼叫時建立的,為函式引數變數申請空間,函式退出時釋放,不用程式設計師參與。
靜態區 編譯器執行時一直存在,由編譯器負責分配,程式退出時釋放,不用程式參與
堆區 程式根據需要用malloc建立的記憶體 由程式設計師用free釋放
所以說你在子函式裡面定義的變數以屬於棧區 由系統自動在函式退出時釋放
而你用malloc建立的空間 系統卻不會為你釋放 要銷燬的話 由你自己用free釋放
懂了麼?
在補充一下 棧區存放區域性資料和引數 靜態區存放程式的全域性變數和靜態變數
堆區存放 程式動態申請的資料
2樓:
在高階語言中,區域性變數是通過堆疊實現的,函式返回,堆疊平衡(無論由誰負責)後,區域性變數即被銷燬,
malloc函式申請的空間由系統分配,其資訊被記錄在記憶體分配表中,它並不在堆疊中,要釋放它,需使用free函式向系統申請釋放
3樓:潘穎我喜歡你
用malloc申請的空間是在堆中開闢的,它的生命週期是直到free掉或者程式結束的時候,而在子函式定義的臨時變數的從棧裡面申請的,在作用域結束後就銷燬了,所以不能返回棧變數的指標。而堆中的記憶體地址則可以返回。建議樓主看看堆和棧的相關知識
4樓:
250431615解釋的很清楚!
求解c語言的一個問題~ 20
5樓:du知道君
void fun(int x) main()
請問C語言的檔案操作問題,請問一個C語言的檔案操作問題
include include define max 40 int main void puts enter words to add to the file press the enter puts key at the beginning of a line to terminate.rewin...
c語言問題,急!賞,c語言問題,急!賞
下面的程式是修改過的,已經在vc環境中除錯成功,你要算fahr,可你在輸出之前算得卻是celsius,錯誤出在這裡。至於其他的修改都是多餘的。include void main celsius 5 9 fahr 32 括號之間缺了些什麼吧.而且只能把已賦值的變數賦給沒賦值的變數哦 也就是說只能fah...
C語言問題急請求幫助,C語言問題!!!急!!!請求幫助
include int main 把100 150的偶數存入陣列 for i 0,j 100 j 150 i j 2 for i 0 i 26 i 行數是偶數的情況 else printf 6d arr i 個數 1 row count 每記5個數,打個回車,行數 1 if row count 5 ...