神奇的问题!编译过,调试过,执行时就崩溃!我内心已然崩溃!!
小甲鱼老师讲的程序!纯属瞎搞!搞了一个让人崩溃的问题出来!{:9_229:}#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
struct ku
{
int xuhao;
char xingming;
double chengji;
struct ku *dizhi;
}*p;
struct ku *chuangjian();
void print(struct ku *z);
int n;
int main()
{
printf("******请根据提示输入学生的学号,姓名,成绩*********\n");
p=chuangjian();
print(p);
system("pause");
return 0;
}
struct ku *chuangjian()
{
struct ku *head,*p1,*p2;
head=NULL;
n=0;
p1=p2=(struct ku *)malloc(sizeof(struct ku *));
TIAOZHUANG:
printf("***请输入学号****\n");
scanf("%d",&p1->xuhao);
if(p1->xuhao==0) //当输入的学号为0时,就直接跳到下面!
{
goto H;
}
while(getchar()!='\n');
printf("***请输入姓名****\n"); //修改整个程序不要输入姓名这个操作就能正常运行完!
gets(p1->xingming); //能编译过,调试时,整个程序都能正常运行完。
//但运行时,把下面成绩输入完,就崩溃了!
printf("***请输入成绩****\n");
scanf("%lf",&p1->chengji);
while(p1->xuhao)
{
n=n+1;
if(n==1)
{
head=p1;
}
else
{
p2->dizhi=p1;
}
p2=p1;
p1=(struct ku *)malloc(sizeof(struct ku *));
goto TIAOZHUANG;
}
H:
p2->dizhi=NULL;
return head;
}
void print(struct ku *z)
{
printf("你输入%d个学生的信息\n",n);
while(z)
{
printf("学号%d姓名%s成绩%lf\n",z->xuhao,z->xingming,z->chengji);
z=z->dizhi;
}
} p1=p2=(struct ku *)malloc(sizeof(struct ku *));
替换为 p1=p2=(struct ku *)malloc(sizeof(struct ku));
p1=(struct ku *)malloc(sizeof(struct ku *));
替换为 p1=(struct ku *)malloc(sizeof(struct ku));
malloc分配的时候需要分配整个结构体所占内存大小,而不是单单这个结构体指针所占内存 kingking27 发表于 2015-8-1 15:00
p1=p2=(struct ku *)malloc(sizeof(struct ku *));
替换为 p1=p2=(struct ku *)malloc(sizeof(struct ku)) ...
谢谢!问题已解决!!非常感谢!
那这个的原因是!我分配的是结构指针的地址!存储空间不够造成的原因吗? 现在的我 发表于 2015-8-2 10:02
谢谢!问题已解决!!非常感谢!
那这个的原因是!我分配的是结构指针的地址!存储空间不够造成的原因吗 ...
也可以暂时这么理解,建议你再琢磨琢磨指针的相关知识 太高深了,受教了
页:
[1]