當前位置:首頁 » 編程語言 » c語言free怎麼用

c語言free怎麼用

發布時間: 2022-08-15 20:35:56

c語言:關於FREE()函數的用法

定義的指針不佔內存,指針只是一個指向內存(可以由malloc開辟)的東西,free釋放的是指針所指向已經開辟好的內存空間,用free釋放。不然容易造成內存泄漏!

② 關於C語言中free函數的使用

free(*add(a,b));顯然是寫錯了,應該是free(add(a,b));才對。改後從原理到語法都是正確的,是完全合法有效的。但為了釋放內存,要調用兩次自定義函數add這種操作值得嗎?回答肯定是否定的;再說調用兩次自定義函數就進行了兩次malloc操作,釋放的只是第二次調用申請的內存,第一次調用時申請的內存並沒有釋放,所以還是在主調函數中用一個指針變數接收的好,不然是有所謂內存泄漏的。

③ c語言中的FREE的用法如題 謝謝了

別聽樓上的瞎講 int a[100][100];是不能被釋放的!因為這是固定分配空間而不是動態分配空間! 這樣吧,給你個例子 1. void main(){ int a[100]; free(a);//出錯,無法釋放固定空間。在程序結束後此空間自動釋放 } 2. #include <malloc.h> void main(){ int *a; a=(int*)malloc(sizeof(int)*100);//相當於int a[100],只是用動態空間分配 free(a);//成功,釋放動態空間 //如果沒有上一步,程序結束後不會像1例一樣自動釋放a的空間!這會造成內存泄露! } 從1、2兩例可以看出,free釋放的只能是malloc開的空間。 現在來個二維空間的例子 3. #include <malloc.h> void main(){ int **a,i; a=(int**)malloc(sizeof(int)*100); for(i=0;i<100;i++)[ a[i]=(int*)malloc(sizeof(int)*100); //懂了嗎?先將a開個100的空間,再將a的每一位開空間。就得到a[100][100]的效果 } //釋放時先釋放a的所有數 for(i=0;i<100;i++)[ free(a[i]); } //最後釋放a free(a); } 話說我們要跟上時代,那用C++呢? 4. #include <iostream> using namespace std; void main(){ int *a,i; a=new int[100]; delete[] a; } 4例是一個很普通的開空間的例子。那麼二維呢? 5. #include <iostream> using namespace std; void main(){ int **a,i; a=new int*[100]; for(i=0;i<100;i++){ a[i]=new int[100]; //原理相同,相當於a[100][100] } //釋放原理也相同 for(i=0;i<100;i++){ delete[] a[i]; } delete[] a; }

求採納

④ c語言中 free的用法~

還可以參考
http://hi..com/nidil/blog/item/e205770986fe24af2fddd4d7.html
=============
釋放內存 free 函數
需要包含頭文件(和 malloc 一樣):

#include



#include

函數聲明:

void free(void *block);

即: void free(指針變數);

之所以把形參中的指針聲明為 void* ,是因為free必須可以釋放任意類型的指針,而任意類型的指針都可以轉換為void *。

舉例:

int* p = (int *) malloc(4);

*p = 100;

free(p); //釋放 p 所指的內存空間

或者:

int* p = (int *) malloc ( sizeof(int) * 100 ); //分配可以放得下100個整數的內存空間。

……

free(p);

free 不管你的指針指向多大的空間,均可以正確地進行釋放,這一點釋放比 delete/delete [] 要方便。不過,必須注意,如果你在分配指針時,用的是new或new[],那麼抱歉,當你在釋放內存時,你並不能圖方便而使用free來釋放。反過來,你用malloc 分配的內存,也不能用delete/delete[] 來釋放。一句話,new/delete、new[]/delete[]、malloc/free 三對均需配套使用,不可混用!

int* p = new int[100];

... ...

free(p); //ERROR! p 是由new 所得。

⑤ C語言 free()函數的使用規則

free(a)和free(b)均可以,但是只能free一次,不能free(a)之後又free(b),那樣會出錯的。
free(c)也不行,因為c的位置沒有保存malloc時的輔助信息(用於free)

第二個問題:
free(a)就是將鏈表中這一個節點釋放了,a->next指向的內存不會釋放,但是整個a包括a->next佔用的空間都已釋放,a->next不能再用了。

熱點內容
怎麼用紙做豌豆解壓玩具 發布:2022-09-29 04:39:17 瀏覽:731
雲存儲播放時間表 發布:2022-09-29 03:58:31 瀏覽:598
新英朗4缸買哪個配置劃算 發布:2022-09-29 03:51:54 瀏覽:122
紅旗5配置怎麼選 發布:2022-09-29 03:44:21 瀏覽:887
linux安裝maven 發布:2022-09-29 03:29:18 瀏覽:595
吉利星瑞豪華天窗版有什麼功能配置 發布:2022-09-29 03:20:28 瀏覽:822
伺服器固定ip和彈性ip一起用 發布:2022-09-29 02:40:49 瀏覽:509
gpioc語言 發布:2022-09-29 02:34:40 瀏覽:959
h乚c語言 發布:2022-09-29 02:34:39 瀏覽:410
迷你世界體驗服正式服密碼是多少 發布:2022-09-29 02:21:19 瀏覽:419