free只能釋放由堆動態(tài)申請的空間,但是第一個中p,q兩個不同的指針變量指向同一片地址,

我們擁有十多年網(wǎng)頁設(shè)計和網(wǎng)站建設(shè)經(jīng)驗,從網(wǎng)站策劃到網(wǎng)站制作,我們的網(wǎng)頁設(shè)計師為您提供的解決方案。為企業(yè)提供成都做網(wǎng)站、網(wǎng)站制作、微信開發(fā)、小程序設(shè)計、成都做手機(jī)網(wǎng)站、html5、等業(yè)務(wù)。無論您有什么樣的網(wǎng)站設(shè)計或者設(shè)計方案要求,我們都將富于創(chuàng)造性的提供專業(yè)設(shè)計服務(wù)并滿足您的需求。
free(q);
q = NULL;
后,q和p指向的空間被釋放,且q被賦值為NULL,但是此時p變量的值并沒有改變,即其值還是原來申請的空間的首地址。這里注意原來申請的空間已被釋放,只是p還保留那篇空間的首地址值,所以一般開發(fā)中釋放空間后,要把相關(guān)變量賦值為NULL,以防后面會非法訪問一個已經(jīng)釋放的空間。
第二個,釋放了。
清除鏈表是需要兩根指針前后走的,可以看成是一個“過河拆橋”的過程 1)首先讓兩個指針p,q指向鏈表頭; 2)然后讓p指向q的next; 3)free掉q所指向的節(jié)點; 4)q指向p; 5)判斷p是否為空,如果空,結(jié)束循環(huán),否則轉(zhuǎn)2)。
比如
int *a = (int*)malloc (100*sizeof(int));
int *b = a, *c = a + 10;
那么free(b) 和 free(a)是合法,他們的工作都是釋放申請的a的內(nèi)存100個int
再如用遞歸創(chuàng)建鏈表,
node* a = (node*)malloc(sizeof(node));
a-next = (node*)malloc(sizeof(node));
... ...
free(a)只釋放node的申請內(nèi)存,a-next不會釋放,這樣做會造成內(nèi)存泄漏!
free的使用參考
你不緊 刪除錯了前面的新建鏈表也錯了,我試了一下你的程序,存的時候是從前往后,輸出的時候是從后往前
#include?stdio.h
#include?stdlib.h
struct?Node{
int?con;
Node?*next;
};
Node*?insert(Node?*h,int?a,int?pos)//這里,增加返回類型
{
Node?*p=(Node?*)malloc(sizeof(Node));
Node?*pt=h;
if?(pos==0)?
{
p-con=a;
p-next=h;
h?=?p;
}
else
{
for(int?i=1;ipos;i++)//這里,如果pos值輸入大于節(jié)點個數(shù),會導(dǎo)致越界,自己修改
{
pt=pt-next;
}
p-con=a;
p-next?=?pt-next;
pt-next=p;
}
return?h;//這里,返回地址
}
int?main()
{
int?i;
int?count=0;
puts("Enter?num");
scanf("%d",i);
Node?*p=(?Node?*)malloc(sizeof(?Node));
Node?*head=p;
p-next=NULL;
p-con=i;
Node?*c=head;
puts("Next?one,nonnum?to?stop");??
while(scanf("%d",i)==1)
{
fflush(stdin);
p=(struct?Node*)malloc(sizeof(struct?Node));
p-con=i;
c-next=p;
p-next=NULL;
c=p;
puts("Next?one,nonnum?to?stop");
}
fflush(stdin);
int?a,pos;?
puts("insert?a?at?pos");
scanf("%d?%d",a,pos);
head?=?insert(head,a,pos);//這里,地址傳出來
c=head;
while(c!=NULL)??
{
printf("%d?%d\n",count,c-con);
count++;
c=c-next;
}
c=head;?
Node?*tmp;
while(c!=NULL)//here,多了個分號,內(nèi)存釋放需要改
{
tmp?=?c;
c=c-next;
free(tmp);
}
return?0;
}
free(q); 釋放q指針?biāo)鶕碛械馁Y源,告訴系統(tǒng),本程序不再使用該內(nèi)存地址(free的功能就是這個)
q=q-next; 然后繼續(xù)引用該地址,則程序可能會死掉!
文章標(biāo)題:c語言free函數(shù)鏈表 c語言的free函數(shù)
當(dāng)前路徑:http://www.chinadenli.net/article32/hpigpc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、云服務(wù)器、Google、網(wǎng)站排名、靜態(tài)網(wǎng)站、App設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)