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)是不允許的。