我在做这个c语言链表的题目时,编译能通过,但是运行时,内存什么不能为读,不知道是不是变量没释放?谢谢

题目:建立一个链表,每一个结点包括:学号,姓名,性别,年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去,否则提示用户输入学号,姓名,性别等信息,... 题目:建立一个链表,每一个结点包括:学号,姓名,性别,年龄。
输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,
则将此结点删去,否则提示用户输入学号,姓名,性别等信息,
并插入该结点。 下面是我自己做的,不知道好不好,谢谢各位高手指导指导!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student
{
int xuehao;
char name[10];
char sex;
int age;
struct student *next;
};
void print(struct student *head)
{
struct student *p;
p=head;
if(head!=NULL)
{
do
{
printf("%d,%s,%c,%d",p->xuehao,p->name,p->sex ,p->age);
p=p->next;
}while(head!=NULL);
}
else
{
printf("this is a empty !");
}
}
int main()
{
int n=1;
struct student *head;
int age_temp;
head=(struct student *)malloc(sizeof(struct student));
head->xuehao=100;
memset(head->name, 0 , sizeof(head->name));
strcpy(head->name, "aaa");
head->sex = 'f';
head->age = 10;
head->next = NULL;
while(1)
{
struct student *temp;
temp=head;
printf("请输入一个新的年龄:");
scanf("%d",&age_temp);
if(age_temp==0)
break;
else if(age_temp==temp->age&&temp->next==NULL)
head=NULL;
else if(age_temp!=temp->age&&temp->next==NULL)
{
struct student *p;
p=(struct student *)malloc(sizeof(struct student));
printf("请输入第一个节点的学号:");
scanf("%d",&p->xuehao);
printf("请输入起一个节点的姓名:");
memset(p->name, 0 , sizeof(p->name));
scanf("%s",p->name);
printf("请输入第一个节点的性别: f of m ");
scanf("%c",&p->sex);
p->age =age_temp;
temp->next=p;
p->next =NULL;
}
while(temp->next!=NULL)
{
struct student *p1,*p2;
p1=head;
while(age_temp!=p1->age&&p1->next!=NULL)
{
p2=p1;
p1=p1->next;
n++;
}
if(age_temp==p1->age)
{
if(n==1)
head=temp->next;
else
{
p2->next=p1->next;
free(p1);
break;
}
}
if(p1->next ==NULL)
{
struct student *add;
add=(struct student *)malloc(sizeof(struct student));
printf("请输入节点的学号:");
scanf("%d",&add->xuehao);
printf("请输入节点的姓名:");
memset(add->name, 0 , sizeof(add->name));
scanf("%s",add->name);
printf("请输入节点的性别: f of m ");
scanf("%c",&add->sex);
add->age =age_temp;
p1->next =add;
add->next = NULL;
break;
}
temp=temp->next;
}
print(head);
}
}
展开
 我来答
庚午子李
2011-04-23 · TA获得超过369个赞
知道小有建树答主
回答量:156
采纳率:0%
帮助的人:122万
展开全部
你定义的sex,在输入时,没法输入,存入内存,不知道是怎么回事,如果用字符串则可以,
还有你的p2->next=p1->next;
free(p1);
有问题,将p1释放,就将head->next 也释放了,就没有存入到内存之中
追问
请问那应该怎么修改呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
劳伤痕
2011-04-23 · TA获得超过793个赞
知道小有建树答主
回答量:364
采纳率:0%
帮助的人:446万
展开全部
把printf中的while(head!=NULL);
改为p!=NULL
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
霸气侧漏了哦
2012-04-19
知道答主
回答量:1
采纳率:0%
帮助的人:2.8万
展开全部
加QQ我来告诉你,已发密信给你了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式