關於變數生命週期,值傳,記憶體洩漏的終極討論

2021-05-26 14:55:53 字數 648 閱讀 5921

關於生命週期,值傳,記憶體洩漏的終極討論

如果是定義乙個指標,則要麼通過函式&指標的形式在函式中為其分配記憶體,要麼直接在下面通過malloc()為其分配記憶體

通過函式分配記憶體也有兩種形式,一是在函式中利用malloc,別一種是一般的形式

不管何種形式,只要利用了malloc最後都要free(),不然會記憶體洩漏

如果是一般的控制代碼,結構體,類等一般變數,一般在函式結束時都被銷毀,兩種形式例外,

1,利用全域性變數將其值儲存了下來,

2.其中的記錄資訊被別的已存在的東西(且不會在函式結束時銷毀)繼cheng下來了,其被銷毀也是自然的事情

其中第二種2種情況最常用

外函式傳進來的東西,除非原函式定義為引用,或其是作為位址傳過來的,其中的修改後的東西不會丟,因其是直接在原東西上做的修改,而原東西的生命期也不是他控制的

通常有時候看來資訊會丟的東西沒有丟就是因為函式原型是引用引數,這時候應該檢視原型以更搞清楚,一般情況都是傳址,傳引用少,傳值更少,因為這樣的效率很低,只在傳整形值時才會用到傳值

一般傳結構體類等,都是傳址,api中傳引用的也不多,也能是微軟怕引用混亂吧

還有一種情況,函式結束時資料不會丟,假如在函式中這是乙個指標,並且指標已經指向了內容,return(指標),則指標指向的資料不會丟失。參見:p285大師技巧 

變數的生命週期

from 今天在論壇上看到有朋友發帖問道 既然靜態全域性變數與全域性變數都儲存在全域性資料區,為什麼作用域卻不一樣呢?也許答案非常簡單 c 就是這麼規定的,靜態全域性變數與全域性變數的唯一區別就是作用域不同。對乙個c 變數來說,有兩個屬性非常重要 作用域和生命週期,它們從兩個不同的維度描述了乙個變數...

變數的生命週期

1 全域性變數 作用域 全域性作用域 只需要在乙個原始檔中定義,就可以作用於所有的原始檔 生命週期 程式執行期一直存在 記憶體分布 全域性 靜態儲存區 注意 如果再兩個檔案中都定義了相同名字的全域性變數,則連線錯誤 變數重定義。2 全域性靜態變數 生命週期 程式執行期一直存在 作用域 檔案作用域 只...

c變數的生命週期

內部變數 生命週期 函式結束時結束.作用域 宣告的花括號中.儲存區域 棧記憶體區域.不會自動初始化.但會申請空間.外部變數 生命週期 和程式的生命週期一樣.作用域 程式的所以地方做可以使用,但需要使用extren進行宣告.儲存區域 在全域性區域.自動初始化.並生命自身的儲存空間.內部靜態變數 生命週...