为什么这个静态链表一运行到指定位置程序就会崩溃?
#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个回答

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

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

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

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

Y_csgoto
Y_csgoto 哦哦,明白了,的确是把等号写成了赋值号导致指针指向空,多谢解答
12 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

1
关于链表一元多项式求和的问题
3
怎么用文件储存链表并能够随时打开对其进行操作
2
双向链表怎么提高插队效率及实现倒排
2
请问这个删除节点函数有什么问题,编译链接通过运行崩溃
5
c语言课程设计-双向链表(自学看不懂)之绝望 求大佬引路 感激涕零
4
C语言链表与文件 从文件读数据到链表里
4
c语言程序设计-将文件内容赋到一个链表里 然后写一个增加节点的函数 将新增加的节点连到那个链表后面
3
c语言运行出错 是链表哪里出错了吗
2
单链表删除 清空链表过程注释
7
求助!!这个程序出了到底什么问题?为什么运行不了?
3
写一个删除链表的倒数第n个节点的问题能通过,但是提交答案显示出错
2
新手提问,C语言链表的一个练习,这个程序为什么会卡住?
0
静态链表初始化中出现的问题?
2
新手使用链表过程中遇到一个问题
2
C语言,如何按值查找,然后返回这个值在链表中的位置?
1
输入若干个正整数(输入-1为结束标志),建立一个单向链表,将其中的偶数值结点删除后输出。
1
C++设计一个循环链表,用来表示大整数
0
用fscanf和fgets从文件读取数据存储到链表失败是为什么??
2
为什么用while循环至链表某尾时程序不再运行?
4
问一个很愚蠢的基础问题,p=p->next链表循环里,为什么这样不会覆盖掉链表的值啊