- 相關(guān)推薦
C語言中malloc()和free()函數(shù)的理解
C語言是一門通用計(jì)算機(jī)編程語言,應(yīng)用廣泛。C語言的設(shè)計(jì)目標(biāo)是提供一種能以簡易的方式編譯、處理低級(jí)存儲(chǔ)器、產(chǎn)生少量的機(jī)器碼以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的編程語言。以下僅供參考!
C++ 中malloc()和free()函數(shù)的理解
關(guān)于malloc和free這兩個(gè)函數(shù),malloc的用法示例:int *p=(int *)malloc(2*sizeof(int)); 它表示在堆中開辟一塊大小為2*sizeof(int)的一塊內(nèi)存空間,p指向這塊內(nèi)存空間的起始地址,malloc前面的(int*)表示這塊空間用來存儲(chǔ)int型數(shù)組。開辟了這塊空間后,可以修改這個(gè)空間中的值,例如為*p,*(p+1)做賦值操作,如果再次使用malloc函數(shù),例如再寫一個(gè) int *q=(int *)malloc(2*sizeof(int)); 此時(shí)開辟的以q為起始地址長度為2*sizeof(int)的空間是不會(huì)覆蓋p所指向的空間的。但是,如果在int *q=(int *)malloc(2*sizeof(int));之前寫一個(gè)free(p),那么,q所指向的空間則有可能覆蓋p指向的空間。所謂的free(p)操作,其實(shí)是修改p所指向的空間的標(biāo)記值,讓其可以被覆蓋。盡管執(zhí)行了free(p),p仍就指向以前的起始地址,依舊可以對(duì)*p,*(p+1)賦值,并且可訪問他們(例如輸出)。
代碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | int main(){ int *p=( int *) malloc (2* sizeof ( int )); free (p); *p=1; *(p+1)=2; cout<<p<<endl<<(p+1); cout<<endl; cout<<*p<<endl<<*(p+1); int *q=( int *) malloc (2* sizeof ( int )); cout<<endl<<q<<endl<<(q+1); cout<<endl<<*q<<endl<<*(q+1); return 1; } |
運(yùn)行結(jié)果:
補(bǔ)充:
int *p=(int *)malloc(2*sizeof(int)); 若要釋放這段空間,必須free(p),只是單單想釋放部分空間,例如free(p+1)是不允許的。
【C語言中malloc()和free()函數(shù)的理解】相關(guān)文章:
如何運(yùn)用C語言malloc和free函數(shù)08-25
淺談如何運(yùn)用C語言malloc和free函數(shù)08-09
c語言中free的用法11-05
c語言中free的用法指導(dǎo)09-17
C語言中isalnum()函數(shù)和isalpha()函數(shù)的對(duì)比10-12
C語言中函數(shù)的區(qū)分08-30
C語言中g(shù)ets()函數(shù)知識(shí)08-10