首页 新闻 会员 周边 捐助

请教:C语言销毁链表,并且将外部指针置为NULL,但总是报错,不知道哪个地方写错了?

0
悬赏园豆:5 [待解决问题]
void dstmsg(S_MSG** msghead)
{
S_MSG *p,*q;
q = p = *msghead;

while(p != NULL)
{
p = p->pnext;
free(q);
q = p;
}

*msghead = NULL;

}
akangmaker的主页 akangmaker | 菜鸟二级 | 园豆:363
提问于:2016-10-14 09:14
< >
分享
所有回答(2)
0

while部分改成如下试试:

while(p != NULL)
{
  q=p->pnext;  
   free(p);  
  p=q;
}

 

jello chen | 园豆:7336 (大侠五级) | 2016-10-14 09:40

p和q交换,然而并没有什么暖用

支持(0) 反对(0) akangmaker | 园豆:363 (菜鸟二级) | 2016-10-15 15:37
0

不好意思,最后找到了,错误是另外一个函数引起的
void main(){
//...
dstmsg(&pmsg);
printf("msglen=%d\n",msglen(pmsg));
}

int msglen(S_MSG* msghead)
{

S_MSG* p = msghead;
int c = 0;
while(p->pnext != NULL)
{
p = p->pnext;
c++;
}
return c;
}
计算msg长度的时候出错,改成下面就正常了:
int msglen(S_MSG* msghead)
{
if(msghead == NULL)
return 0;

S_MSG* p = msghead;
int c = 0;
while(p->pnext != NULL)
{
p = p->pnext;
c++;
}
return c;
}

akangmaker | 园豆:363 (菜鸟二级) | 2016-10-15 16:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册