销毁线性表的函数我这样写对么
答案:2 悬赏:0
解决时间 2021-04-06 15:48
- 提问者网友:生亦何欢
- 2021-04-06 08:03
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);
这样不是上来就将头结点释放了么?
最佳答案
- 二级知识专家网友:晨与橙与城
- 2021-04-06 09:41
销毁线性表要注意一点:
不可以直接释放头结点,必须所有的结点全部释放掉,最后释放头结点。
如果直接将头结点置空,会导致其它结点元素所占空间不被有效释放,产生内存泄露
一个比较正统的清空线性表的代码如下:
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); //释放头结点
}
}
不可以直接释放头结点,必须所有的结点全部释放掉,最后释放头结点。
如果直接将头结点置空,会导致其它结点元素所占空间不被有效释放,产生内存泄露
一个比较正统的清空线性表的代码如下:
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); //释放头结点
}
}
全部回答
- 1楼网友:一池湖水
- 2021-04-06 10:24
这个函数有点问题,我给你改了一下,判断结束不能用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
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯