求助

qq_45753703 2019-12-29 12:12:28
想问下这个哪里错了 谢谢
...全文
15 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_45753703 2019-12-29
  • 打赏
  • 举报
回复
引用 1 楼 寻开心的回复:
它提示你了, 当空或者只有1个元素的时候,你的结果有问题

完整的把代码贴文字出来,不要图,否则无妨帮助调试
#include <stdio.h> #include<stdlib.h> typedef struct number{ int a; struct number *next; }NUM; int main() { int n,i=0; scanf("%d",&n); NUM *head,*p,*q; head=(NUM*)malloc(sizeof(NUM)); head->next=NULL; while(i<n) { p=(NUM*)malloc(sizeof(NUM)); scanf("%d",&p->a); if(i==0) q=head=p; else q->next=p; p->next=NULL; q=p; i++; } i=1; p=head; while(i<=n) { if(i!=n) printf("%d ",p->a); else printf("%d",p->a); i++; p=p->next; } free(p); free(q); free(head); return 0; }
寻开心 2019-12-29
  • 打赏
  • 举报
回复
它提示你了, 当空或者只有1个元素的时候,你的结果有问题

完整的把代码贴文字出来,不要图,否则无妨帮助调试
寻开心 2019-12-29
  • 打赏
  • 举报
回复
你的问题在 最后的free(p) free(q)和 free(head)上
你可以把这三行删掉估计能过(不free,在某些测评系统上不算错)

free(NULL)不会执行任何操作不会产生错误
但是p,q,head这三个家伙要是有相等的,就会造成一个地址被free多次, 这是致命错误,你的问题很可能出在这里

算法上,你需要构造一个循环,从头开始摘下节点并释放,然后处理后续的节点,直到全部释放完

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧