1 回答

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊
請(qǐng)問(wèn)一下free是不是將標(biāo)記為已使用的地址改為未使用,也就是里面的數(shù)據(jù)并未清空,只是改了下“標(biāo)記”?
你說(shuō)的這些是在猜測(cè) free 的具體實(shí)現(xiàn)。 C 標(biāo)準(zhǔn)沒(méi)有規(guī)定 free 具體實(shí)現(xiàn)應(yīng)該如何,所以這個(gè)問(wèn)題沒(méi)有標(biāo)準(zhǔn)答案。
C 標(biāo)準(zhǔn)只是規(guī)定:
free 的參數(shù)必須是之前由庫(kù)函數(shù)分配內(nèi)存而來(lái)的指針,或是 null 指針
參數(shù)如果之前被 free 了,則函數(shù)的行為是未定義的
訪問(wèn)已被 free 的指針的行為是未定義的
當(dāng)然,你的猜測(cè)也是有道理的。確實(shí)很多實(shí)現(xiàn)是這樣的。
也許你的這些思考對(duì)你學(xué)習(xí)理解 C 語(yǔ)言有幫助。但是在學(xué)習(xí)和使用 C 語(yǔ)言時(shí)要記?。耗悴粦?yīng)該假定你的編譯器會(huì)如何實(shí)現(xiàn),只應(yīng)該按照規(guī)定的語(yǔ)法規(guī)則來(lái)使用 C。
還有個(gè)問(wèn)題就是用malloc創(chuàng)建一個(gè)在子函數(shù)中的數(shù)組,這個(gè)數(shù)組是動(dòng)態(tài)存儲(chǔ)類型嗎,是不是自動(dòng)存儲(chǔ)類型(動(dòng)態(tài)與自動(dòng)的關(guān)系是什么?)?
是你說(shuō)的“動(dòng)態(tài)存儲(chǔ)類型”的。其實(shí)就是指需要?jiǎng)討B(tài)管理的內(nèi)存(用 malloc 分配、free 釋放...等)。
那當(dāng)然就不是“自動(dòng)存儲(chǔ)類型”的了。你通常定義的普通變量一般都屬于這種“自動(dòng)類型”,這樣的變量所占用的內(nèi)存只在它所在的作用域中存在,離開(kāi)其作用域后就會(huì)被銷毀。
這兩種存儲(chǔ)類型的區(qū)別簡(jiǎn)單地說(shuō)就是這樣的。
所以才會(huì)強(qiáng)調(diào)說(shuō)“手動(dòng)分配的內(nèi)存一定要記得 free 掉,不然就會(huì)內(nèi)存泄漏”,就是因?yàn)檫@些所謂“動(dòng)態(tài)存儲(chǔ)類型”并不會(huì)被自動(dòng)銷毀。
- 1 回答
- 0 關(guān)注
- 944 瀏覽
添加回答
舉報(bào)