这个程序为什么会出现内存错误?

siweixjtu 2011-08-03 07:50:46
#include<stdio.h>
#include<stdlib.h>
typedef struct sx{
int data;
struct sx *next;}sx;
main(){
int a[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18};
sx *pa1,*pa2,*l,*l1,*l2;
l=(sx*)malloc(sizeof(sx));
int i;
l2=l;
for(i=0;i<18;i++)
{
l1=(sx*)malloc(sizeof(sx));
l1->data=a[i];
l2->next=l1;
l2=l1;
}
l2->next=NULL;

pa1=l->next;
pa2=l->next;

while(pa1->next->next!=NULL)
pa1->next=pa1->next->next,
pa1=pa1->next->next;

pa1->next=NULL;
while(pa2->next!=NULL)
printf("%d\n",pa2->data),
pa2=pa2->next;
system("pause");
}
程序目的是把数组中的奇数项找出做成链表,运行提示内存出错。。请指教。。。
...全文
90 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
siweixjtu 2011-08-03
  • 打赏
  • 举报
回复
这样改是可以运行,可是结果不对。。。
lifesider 2011-08-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 siweilxy 的回复:]
应该不是这个错误吧,用逗号可以省略大括号的吧
[/Quote]
没注意是逗号,晕
这样改改
while(pa1->next->next!=NULL)
改成
while(pa1 && pa1->next && pa1->next->next!=NULL)

pa1->next=NULL;
改成
if(pa1)
pa1->next = NULL;
siweixjtu 2011-08-03
  • 打赏
  • 举报
回复
有道理,大概是还要再用一个指针才可以了
jixingzhong 2011-08-03
  • 打赏
  • 举报
回复
while(pa1->next->next!=NULL)
pa1->next=pa1->next->next,
pa1=pa1->next->next;

再分析分析,执行后面的语句后,pa1已经超过pa1->next->next!=NULL条件判断有效的范围了。
siweixjtu 2011-08-03
  • 打赏
  • 举报
回复
应该不是这个错误吧,用逗号可以省略大括号的吧
lifesider 2011-08-03
  • 打赏
  • 举报
回复
while(pa1->next->next!=NULL)
pa1->next=pa1->next->next,
pa1=pa1->next->next;

while(pa2->next!=NULL)
printf("%d\n",pa2->data),
pa2=pa2->next;

这两处是不是应该加上大括号,改成
while(pa1->next->next!=NULL)

pa1->next=pa1->next->next,
pa1=pa1->next->next;

while(pa2->next!=NULL)

printf("%d\n",pa2->data),
pa2=pa2->next;

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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