C語(yǔ)言不會(huì)釋放。所謂動(dòng)態(tài)內(nèi)存,是由malloc系列函數(shù)進(jìn)行申請(qǐng)的內(nèi)存,除非在程序中使用free釋放,否則該段內(nèi)存不會(huì)被釋放掉。標(biāo)準(zhǔn)庫(kù)中malloc函數(shù)的實(shí)現(xiàn)原理。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、重慶小程序開(kāi)發(fā)公司、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了巴彥淖爾免費(fèi)建站歡迎大家使用!
變量定義的同時(shí),必然分配內(nèi)存,但有一些的動(dòng)態(tài)分配的。
函數(shù)內(nèi)部定義的帶static修飾的變量為靜態(tài)變量,這種變量在函數(shù)退出后不會(huì)釋放內(nèi)存,直到程序退出時(shí)一起釋放。3 動(dòng)態(tài)分配內(nèi)存。
肯定會(huì)釋放了,函數(shù)調(diào)用完成后,函數(shù)里的所有局部變量將會(huì)被釋放。但是你寫(xiě)的這個(gè)程序根本就有問(wèn)題。
釋放空間是指用“動(dòng)態(tài)申請(qǐng)內(nèi)存函數(shù)”申請(qǐng)成功的空間,不是你寫(xiě)的代碼占用的空間。
從C語(yǔ)言本身設(shè)計(jì)來(lái)說(shuō),不會(huì)釋放。\x0d\x0a所謂動(dòng)態(tài)內(nèi)存,是由malloc系列函數(shù)進(jìn)行申請(qǐng)的內(nèi)存,除非在程序中使用free釋放,否則該段內(nèi)存不會(huì)被釋放掉。\x0d\x0a從這個(gè)角度來(lái)說(shuō),即使進(jìn)程結(jié)束,該段內(nèi)存也會(huì)被占用。
你釋放了,那個(gè)虛擬內(nèi)存還在啊,就如同,你買(mǎi)了個(gè)房子,房子里放了沙發(fā),沙發(fā)不用了,扔了,但是那個(gè)房子還在的嘛。。
看看是不是你別的程序地方錯(cuò)了,注釋掉看看。有可能是別的地方錯(cuò)了影響到編譯器的判斷 盡量釋放吧,那個(gè)倒是不用,因?yàn)殪o態(tài)變量在棧區(qū)。
如果是new 出來(lái)的內(nèi)存資源的話,那么就用delete釋放,如果是malloc分配出來(lái)的內(nèi)存資源的話,那么就用free()釋放。
用malloc在堆上分配內(nèi)存必須有顯式的free來(lái)釋放,釋放之后返回的指針一定是個(gè)迷失指針,所以在函數(shù)內(nèi)釋放是不可能的。
沒(méi)有回收動(dòng)態(tài)申請(qǐng)內(nèi)存的機(jī)制。需要主動(dòng)釋放。JAVA等高級(jí)語(yǔ)言有這種機(jī)制。剛查了下貌似C++確實(shí)沒(méi)有。即是說(shuō)C/C++ 都需要主動(dòng)釋放動(dòng)態(tài)申請(qǐng)的內(nèi)存。
C管理內(nèi)存大致可以理解為兩種,分配在棧上的,一個(gè)是分配在堆上的。臨時(shí)變量,動(dòng)態(tài)變量,分配在棧上,運(yùn)行完,直接彈出棧,就沒(méi)了。分配在堆上的內(nèi)存,釋放的時(shí)候,基本上可以理解為,指針不指這里了。
c的內(nèi)存泄露主要是出在指針上面。對(duì)于變量,系統(tǒng)都會(huì)在用完后自動(dòng)釋放的。
可以釋放,理由如下:我們知道函數(shù)free(p)的工作方式是將變量p的值所代表的內(nèi)存塊釋放掉。在test函數(shù)中,返回一個(gè)指針變量buff,事實(shí)上,這個(gè)buff的值就是申請(qǐng)到的內(nèi)存塊的起始位置。
在這個(gè)例子中,顯而易見(jiàn)的就是,鏈表釋放了內(nèi)存,head指針應(yīng)該是NULL。如果上面這段話你能明白的話,那么我的建議是,使用你問(wèn)題中“可行”的那段代碼,并添加*list = NULL;在結(jié)尾。
是的,如果沒(méi)有在這塊內(nèi)存中重新寫(xiě)入數(shù)據(jù),這塊內(nèi)存中的數(shù)據(jù)是不會(huì)發(fā)生變化的。
里面的數(shù)據(jù)可能存在,只要該內(nèi)存沒(méi)有被別的地方占用。你free釋放的是內(nèi)存的使用權(quán)。
理解正確,釋放后的值當(dāng)然還在那個(gè)位置,只是你再?zèng)]有指針去指向它,也就無(wú)法操作它了。很多編譯器中,如果對(duì)于剛剛free的內(nèi)存,重新再訪問(wèn),會(huì)發(fā)現(xiàn)里面的值沒(méi)有發(fā)生變化。
會(huì),但是也可能出現(xiàn)清空不徹底的情況,所以你可以使用內(nèi)存清空函數(shù),對(duì)內(nèi)存進(jìn)行清空。
是釋放內(nèi)存;由malloc、calloc、realloc等分配的內(nèi)存;有沒(méi)有原來(lái)的東西并不保證,但這塊內(nèi)存已經(jīng)算是未分配的了,可能會(huì)被再次分配,所以不要再用里面的數(shù)據(jù)了。
釋放是說(shuō)把“原來(lái)指針指向的內(nèi)存空間交還給系統(tǒng)”,由系統(tǒng)重新支配——因?yàn)橛胢alloc分配后那部分內(nèi)存就由你的代碼支配而系統(tǒng)支配不了了。
是的,如果沒(méi)有在這塊內(nèi)存中重新寫(xiě)入數(shù)據(jù),這塊內(nèi)存中的數(shù)據(jù)是不會(huì)發(fā)生變化的。