中易网

销毁线性表的函数我这样写对么

答案:2  悬赏:0  
解决时间 2021-04-06 15:48
void DestroyList(struct student *head) { struct student *p1,*p2; p2=p1=head; while(p1->num!=NULL) { p1=p2; free(p1); p2=p2->next; p1=p2; } free(p1); } 匿名回答的高手 有3个地方不明白啊 LNode Head, P; 难道不应该是LinkList *Head,*p么? 其2while(!P) 为什么这么写?? 难道不是(*p)么 其3 while(!P) { free(Head); 这样不是上来就将头结点释放了么?
最佳答案
销毁线性表要注意一点:
不可以直接释放头结点,必须所有的结点全部释放掉,最后释放头结点。
如果直接将头结点置空,会导致其它结点元素所占空间不被有效释放,产生内存泄露

一个比较正统的清空线性表的代码如下:
void DestroyList(LinkList *L)//初始条件:线性表L已存在。 操作结果:销毁线性表L。
{
LNode Head, P;
if(*L)//若线性表L已存在
{
Head = *L;
P = Head->next;
while(!P) //把链表中除头结点外的所有结点释放
{
free(Head);
Head = P;
P = Head->next;
}
free(Head); //释放头结点
}
}
全部回答
这个函数有点问题,我给你改了一下,判断结束不能用p->num,而应该用p void DestroyList(struct student *head) { struct student *p1,*p2; p1=head; //p1指向头结点 while(p1) //当p1不为空 { p2=p1; //用p2记住p1 p1=p1->next; //p1指针下移 free(p2); //销毁p2 }
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
OPPOR7 plus 移动版 在*#4636#*里面选择GSM/C
夲人今年48干部,身体不太好,办理病退好还是按
遵义会计培训中心哪里有?
有哪种清漆不属于危险品?急虚答案!
溢发商行地址在什么地方,想过去办事
Argox X-1000V 条码打印机走纸问题
我和家长的文明公约400字作文
水调歌头,中秋 谁写的
已经大四,可不可以把户口转到学校,方便工作
芜湖市高中选择
英威腾变频器怎么设置双速.
为什么不论是美女还是帅哥都受欢迎
连续掷一枚骰子两次,第二次比第一次点数大的
中国电通电通手机批发地址有知道的么?有点事
外贸中的2PK袋子是什么意思
推荐资讯
亦庄京东方电子厂,待遇怎么样,听说是生产屏
秒拍上的视频为什么无法下载?
广西冠源建筑工程有限公司地址在什么地方,想
请问验尿出错的几率是多少,前三次验尿都显示
我是一个三级残疾人。在一家福利厂工作3年。
速度与激情7抱小孩海边的那首歌
上传百度云时为什么有时候特别快有时候特别慢
急求《游子吟》的字义(就是其中某些字的意思
请问这是怎么回事?注意力老是集中不了,经常头
重庆民间自发的航模团队有哪些!?本人想做一
消防XL什么意思
诈金花同花大还是顺子大?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?