C語言中malloc()和free()函數的理解
C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。以下僅供參考!
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)賦值,並且可訪問他們(例如輸出)。
代碼如下:
1234567891011121314 | 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; } |
運行結果:
補充:
int *p=(int *)malloc(2*sizeof(int)); 若要釋放這段空間,必須free(p),只是單單想釋放部分空間,例如free(p+1)是不允許的。
-
2017計算機二級C語言精選練習題及答案
很多時候計算機等級證書是我們找工作的敲門磚,因此,計算機等級證書也是有一定的含金量的。以下是小編為大家整理的2017計算機二級C語言精選練習題及答案,希望對大家有幫助!(1)在不同網絡結點的對等層之間的通信需要下列哪一項協議?A)模塊接口B)對等層協議C)電信號...
-
如何使用C語言求N的階乘
使用C語言求N的階乘的方法是很多小夥伴都想知道的,下面小編給大家介紹如何使用C語言求N的階乘,歡迎閲讀!如何使用C語言求N的階乘用遞歸法求N的.階乘程序調用自身稱為遞歸(recursion).它通常把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求...
-
C語言入門知識:常量
導語:在程序運行中,其值不能被改變的量稱為常量。下面是常量相關知識,歡迎閲讀:常量有5種類型:整型常量、實型常量、字符常量、字符串常量和符號常量。(一)數值轉換數字的四種表現形式:①:二進制:所有數字由0,1構成,逢二進一,二進制數中不會出現2.。例:110101②:八進制:以數...
-
C語言新人常見問題與錯誤
不知不覺,學習C語言也快一年了。雖然有C語言課,但是老師完全讓我們自己看書,在自學的過程中,和周圍同學交流中,以及後來在CSDN,BCCN,百度知道看帖回帖中,也看到許多C語言新人常遇到的問題與常犯的錯誤。不妨看看吧。以下僅供參考!對於完整的修正後的程序都在code::block...
相關文章
- The colours of Miracle高中英語作文
- malloc()和free()函數區別
- Oracle認證:OracleTRUNC函數詳解
- 淺談如何運用C語言malloc和free函數
- 如何運用C語言malloc和free函數
- 高中生優秀英語作文:Have a break away from electronics
- 在Excel中使用AMORDEGRC函數的方法
- Perseverance will make you successful英語作文
- Modern Technology Makes Life More Conv英語六級作文
- Choice of large enterprises or small英語四級作文