鱼C论坛

 找回密码
 立即注册
查看: 2416|回复: 4

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

[复制链接]
发表于 2015-8-1 09:20:41 | 显示全部楼层 |阅读模式
8鱼币
小甲鱼老师讲的程序!纯属瞎搞!搞了一个让人崩溃的问题出来!






#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

struct ku
{
int xuhao;
char xingming[20];
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分配的时候需要分配整个结构体所占内存大小,而不是单单这个结构体指针所占内存
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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分配的时候需要分配整个结构体所占内存大小,而不是单单这个结构体指针所占内存
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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)) ...

谢谢!问题已解决!!非常感谢!
那这个的原因是!我分配的是结构指针的地址!存储空间不够造成的原因吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

也可以暂时这么理解,建议你再琢磨琢磨指针的相关知识
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-16 09:37:02 | 显示全部楼层
太高深了,受教了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 08:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表