现在的我 发表于 2015-8-1 09:20:41

神奇的问题!编译过,调试过,执行时就崩溃!我内心已然崩溃!!

小甲鱼老师讲的程序!纯属瞎搞!搞了一个让人崩溃的问题出来!{: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;                                                   
}
}

kingking27 发表于 2015-8-1 09:20:42

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分配的时候需要分配整个结构体所占内存大小,而不是单单这个结构体指针所占内存

现在的我 发表于 2015-8-2 10:02:47

kingking27 发表于 2015-8-1 15:00
p1=p2=(struct ku *)malloc(sizeof(struct ku *));
替换为 p1=p2=(struct ku *)malloc(sizeof(struct ku)) ...

谢谢!问题已解决!!非常感谢!
那这个的原因是!我分配的是结构指针的地址!存储空间不够造成的原因吗?

kingking27 发表于 2015-8-3 09:25:11

现在的我 发表于 2015-8-2 10:02
谢谢!问题已解决!!非常感谢!
那这个的原因是!我分配的是结构指针的地址!存储空间不够造成的原因吗 ...

也可以暂时这么理解,建议你再琢磨琢磨指针的相关知识

腾讯QQ 发表于 2015-8-16 09:37:02

太高深了,受教了
页: [1]
查看完整版本: 神奇的问题!编译过,调试过,执行时就崩溃!我内心已然崩溃!!