下例是一個(gè)動態(tài)分配的程序:
#include
#include
main()
{
int count,*array; /*count是一個(gè)計(jì)數(shù)器,array是一個(gè)整型指針,也可以理解為指向一個(gè)整型數(shù)組的首地址*/
if((array(int *) malloc(10*sizeof(int)))==NULL)
{
printf("不能成功分配存儲空間。");
exit(1);
}
for (count=0;count〈10;count++) /*給數(shù)組賦值*/
array[count]=count;
for(count=0;count〈10;count++) /*打印數(shù)組元素*/
printf("%2d",array[count]);
}
上例中動態(tài)分配了10個(gè)整型存儲區(qū)域,然后進(jìn)行賦值并打印。例中if((array(int *) malloc(10*sizeof(int)))==NULL)語句可以分為以下幾步:
1)分配10個(gè)整型的連續(xù)存儲空間,并返回一個(gè)指向其起始地址的整型指針
2)把此整型指針地址賦給array
3)檢測返回值是否為NULL
2、free函數(shù)
由于內(nèi)存區(qū)域總是有限的,不能不限制地分配下去,而且一個(gè)程序要盡量節(jié)省資源,所以當(dāng)所分配的內(nèi)存區(qū)域不用時(shí),就要釋放它,以便其它的變量或者程序使用。這時(shí)我們就要用到free函數(shù)。
其函數(shù)原型是:
void free(void *p)
作用是釋放指針p所指向的內(nèi)存區(qū)。
其參數(shù)p必須是先前調(diào)用malloc函數(shù)或calloc函數(shù)(另一個(gè)動態(tài)分配存儲區(qū)域的函數(shù))時(shí)返回的指針。給free函數(shù)傳遞其它的值很可能造成死機(jī)或其它災(zāi)難性的后果。
注意:這里重要的是指針的值,而不是用來申請動態(tài)內(nèi)存的指針本身。例:
int *p1,*p2;
p1=malloc(10*sizeof(int));
p2=p1;
……
free(p2) /*或者free(p2)*/
malloc返回值賦給p1,又把p1的值賦給p2,所以此時(shí)p1,p2都可作為free函數(shù)的參數(shù)。
malloc函數(shù)是對存儲區(qū)域進(jìn)行分配的。
free函數(shù)是釋放已經(jīng)不用的內(nèi)存區(qū)域的。
所以由這兩個(gè)函數(shù)就可以實(shí)現(xiàn)對內(nèi)存區(qū)域進(jìn)行動態(tài)分配并進(jìn)行簡單的管理了。