C語言中malloc()和free()函式的理解

C語言是一門通用計算機程式語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。以下僅供參考!

C語言中malloc()和free()函式的理解

C++ 中malloc()和free()函式的理解

關於malloc和free這兩個函式,malloc的用法示例:int *p=(int *)malloc(2*sizeof(int)); 它表示在堆中開闢一塊大小為2*sizeof(int)的一塊記憶體空間,p指向這塊記憶體空間的起始地址,malloc前面的(int*)表示這塊空間用來儲存int型陣列。開闢了這塊空間後,可以修改這個空間中的值,例如為*p,*(p+1)做賦值操作,如果再次使用malloc函式,例如再寫一個 int *q=(int *)malloc(2*sizeof(int)); 此時開闢的.以q為起始地址長度為2*sizeof(int)的空間是不會覆蓋p所指向的空間的。但是,如果在int *q=(int *)malloc(2*sizeof(int));之前寫一個free(p),那麼,q所指向的空間則有可能覆蓋p指向的空間。所謂的free(p)操作,其實是修改p所指向的空間的標記值,讓其可以被覆蓋。儘管執行了free(p),p仍就指向以前的起始地址,依舊可以對*p,*(p+1)賦值,並且可訪問他們(例如輸出)。

程式碼如下:

1234567891011121314int 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; }

執行結果:

補充:

int *p=(int *)malloc(2*sizeof(int)); 若要釋放這段空間,必須free(p),只是單單想釋放部分空間,例如free(p+1)是不允許的。