Y_csgoto
Y_csgoto
采纳率87.5%
2019-03-04 22:51 阅读 308

为什么这个静态链表一运行到指定位置程序就会崩溃?

#define apple sizeof struct fate
void Dynamic()
{


    typedef struct fate
{int age;
struct fate*p;}FATE;//自定义FATE作为结构体简称


FATE*head,*a,*b,*p1;//定义指向每个节点的指针

head=a=b=(struct fate*)malloc(apple);//开辟第一个位置

scanf("%d",&(*head).age);//导入第一个数据


if(head->age!=0)//第一次输入数据后的判断
{

    a=b=(struct fate*)malloc(apple);//开辟第二个位置
    if(a=NULL)//判断开辟函数是否执行成功
        printf("分配失败");
    else
    {       head->p=a;
scanf("%d",&(*a).age);//经测试,一运行到这里就开始崩溃


if(a->age!=0)
{
    b=(struct fate*)malloc(apple);
if(b=NULL)
        printf("分配失败");
    else
    {a->p=b;
scanf("%d",&(*b).age);}
}



p1=head;

while(p1!=0)
{printf("%d",p1->age);
p1=p1->p;

}}}
free(head);//释放内存
free(a);
free(b);
}

主函数就是定义与调用这个函数,但是只要一输入第二个数据,程序就会崩溃,即控制台程序出现“windows发现问题,正在检测”的提示,求问各位大佬,这是什么情况?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

1条回答 默认 最新

  • 已采纳
    caitzh caitzh 2019-03-05 17:47

    因为这两句 if(a=NULL)if(b=NULL) 写错了,应该是 == 两个等号

    写一个等号变成了赋值,使得 a 的值为 NULL

    之后在运行 scanf("%d",&(*a).age); 这句的时候,对 a*a ,所以出错。

    另外,你没有把链表最后一个元素的 p 指针赋值为 NULL,在运行 while(p1!=0) 的时候可能会出现死循环。

    点赞 1 评论 复制链接分享

相关推荐