免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
malloc函數(shù)和free函數(shù) - 計(jì)算機(jī)應(yīng)用 - 同江職教網(wǎng) -- 職業(yè)教育 外語教程 ...
malloc函數(shù)和free函數(shù)

 

 

[ 錄入者:tjzj | 時(shí)間:2008-10-25 17:35:02 | 作者: | 來源: | 瀏覽:238次 ]

<<同江職教網(wǎng)歡迎你---累了聽會(huì)歌吧--奧運(yùn)主題歌 我和你>>

 

假設(shè)您的程序在執(zhí)行過程中需要分配一定量的內(nèi)存。您可以隨時(shí)調(diào)用malloc函數(shù)從堆中申請(qǐng)一塊內(nèi)存。在操作系統(tǒng)為您的程序預(yù)留出這塊內(nèi)存,之后您就可以隨意使用它了。用完之后,要使用free函數(shù)將這塊內(nèi)存返回給操作系統(tǒng)進(jìn)行回收。以后其他程序還可以按自己的需要預(yù)留這塊內(nèi)存。

作為例子,下面的代碼演示了最簡(jiǎn)單的使用堆的方法:

int main()
{
int *p;

p = (int *)malloc(sizeof(int));
if (p==0)
{
printf("錯(cuò)誤:內(nèi)存不足n");
return 1;
}
*p=5;
printf("&dn", *p);
free(p);
return 0;
}

 

程序的開始調(diào)用了malloc函數(shù),這個(gè)函數(shù)做了三件事:

  1. malloc語句首先檢查堆上的空閑內(nèi)存總數(shù),然后判斷:“有沒有足夠的空閑內(nèi)存可以分配一個(gè)所申請(qǐng)的大小的內(nèi)存塊呢?”申請(qǐng)的內(nèi)存塊大小是由傳入malloc的參數(shù)確定的——本例中的sizeof(int)是4個(gè)字節(jié)。若內(nèi)存不足,malloc函數(shù)會(huì)返回零地址告知發(fā)生的錯(cuò)誤(零地址的另一種表示是NULL,它在C代碼中很常用)。否則malloc函數(shù)繼續(xù)執(zhí)行。

     

  2. 若堆上有足夠的內(nèi)存,系統(tǒng)就從堆上“分配”或“預(yù)留”出指定大小的內(nèi)存塊。預(yù)留的目的是為了防止多個(gè)malloc語句恰巧使用同一個(gè)內(nèi)存塊。

     

  3. 接下來系統(tǒng)將預(yù)留出的內(nèi)存塊的地址保存到指針變量中(本例中就是p)。指針變量本身保存了一個(gè)地址。被分配的內(nèi)存塊能夠存儲(chǔ)一個(gè)指定類型的數(shù)值,而指針正是指向此數(shù)值。
下圖顯示了調(diào)用malloc之后的內(nèi)存狀態(tài):

 


右邊的方框表示malloc分配的內(nèi)存塊。

接著程序用if (p==0)檢查指針p以確定分配申請(qǐng)成功(此行也可寫成if (p==NULL)甚至if (!p))。如果分配失?。╬等于零),則程序終止,否則程序?qū)⒎峙涞膬?nèi)存塊初始化為5,然后打印內(nèi)存塊的值,接著調(diào)用free函數(shù)將內(nèi)存塊返還給堆,最后退出。

前面的章節(jié)有一段代碼是將p賦值為一個(gè)現(xiàn)成整數(shù)i的地址,而本例中的代碼和那段代碼實(shí)際上并無不同。區(qū)別只是在于:對(duì)于變

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C語言深入學(xué)習(xí)系列 - 字節(jié)對(duì)齊&內(nèi)存管理
c專家編程
C/C 指針使用常見的坑
堆、棧、數(shù)據(jù)區(qū)、bss、代碼段
【鏈表3】動(dòng)態(tài)內(nèi)存分配
流言終結(jié)者——C語言內(nèi)存管理
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服