一時(shí)看不明白你的代碼。一個(gè)原則是,start指向了誰(shuí)。如果指向了在這個(gè)函數(shù)中定義的臨時(shí)自動(dòng)型數(shù)組,那必然存在返回局部數(shù)組指針的問(wèn)題,就是你說(shuō)的內(nèi)存釋放問(wèn)題。這樣雖然指針被返回了,但它指向的內(nèi)容已經(jīng)不受代碼控制了,很危險(xiǎn)。但如果start指向的是在主函數(shù)中聲明的數(shù)組,或是全局或靜態(tài)數(shù)組(這個(gè)函數(shù)中定義的靜態(tài)數(shù)組也行),或者是用動(dòng)態(tài)分配法獲得的內(nèi)存空間且未曾釋放,則不存在任何問(wèn)題,是完全合理合法的。用動(dòng)態(tài)分配法時(shí)要注意在不用時(shí)釋放內(nèi)存空間,以免造成內(nèi)存泄漏。
10年積累的做網(wǎng)站、成都網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶(hù)對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶(hù)得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)制作后付款的網(wǎng)站建設(shè)流程,更有甘泉免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
C管理內(nèi)存大致可以理解為兩種,分配在棧上的,一個(gè)是分配在堆上的。
臨時(shí)變量,動(dòng)態(tài)變量,分配在棧上,運(yùn)行完,直接彈出棧,就沒(méi)了。
分配在堆上的內(nèi)存,釋放的時(shí)候,基本上可以理解為,指針不指這里了。也就失去了對(duì)這塊內(nèi)存的控制。其實(shí)所謂的釋放。字面意思容易讓人理解錯(cuò)。
有些機(jī)器有些操作系統(tǒng),會(huì)在釋放的時(shí)候清空這段內(nèi)存,但是這種做法效率不高,但是安全,很少有機(jī)器這么做,多數(shù)都是所謂釋放,就是不讓你控制這塊內(nèi)存了而已。
變量用delete釋放,數(shù)組用delete[]釋放,指針的類(lèi)型不能改變。對(duì)于一些簡(jiǎn)單的情況(所有成員都是基本數(shù)據(jù)類(lèi)型,沒(méi)有析構(gòu)函數(shù)),可以直接用delete釋放。
例:
structNODE
{
intidata;
doubleddata;
}node[100];
//釋放空間
delete[]node;
//所有的數(shù)組類(lèi)型釋放空間都這樣寫(xiě)
擴(kuò)展資料
C語(yǔ)言數(shù)組
數(shù)組的聲明并不是聲明一個(gè)個(gè)單獨(dú)的變量,比如number0、number1、...、number99,而是聲明一個(gè)數(shù)組變量,比如numbers,然后使用numbers[0]、numbers[1]、...、numbers[99]來(lái)代表一個(gè)個(gè)單獨(dú)的變量。數(shù)組中的特定元素可以通過(guò)索引訪問(wèn)。
所有的數(shù)組都是由連續(xù)的內(nèi)存位置組成。最低的地址對(duì)應(yīng)第一個(gè)元素,最高的地址對(duì)應(yīng)最后一個(gè)元素。
當(dāng)你用malloc或者calloc申請(qǐng)內(nèi)存之后,這部分內(nèi)存會(huì)用于存儲(chǔ)特定的數(shù)據(jù),而無(wú)法被其他的變量使用。而當(dāng)你如果不釋放,可能會(huì)引起內(nèi)存占用過(guò)多。而如果內(nèi)存占用過(guò)多的話,可能的結(jié)果就是電腦癱瘓。這也就是常說(shuō)的“內(nèi)存泄漏”。函數(shù)原型為:void
free
(void
*
p),一般使用為free(p);(p為指向一個(gè)已分配空間的指針)。在執(zhí)行這個(gè)語(yǔ)句時(shí),電腦就可以把這部分內(nèi)存分配給其他變量。也就算是釋放了。