《Linux C 从入门到精通》一书中例3.3是否有释放内存
发表在其他语言图书答疑区 2020-01-13
是否精华
版块置顶:

在《Linux C 从入门到精通》一书中,例3.3代码如下:

想问下代码中是否有释放内存,我有点小纠结,麻烦解答一下可以吗,谢谢!

#include<malloc.h>

#include<stdio.h>

#define LEN sizeof(struct student)

typedef struct student

{

int num;

int age;

float score;

struct student *next;/*指向链表的下一个结点*/

}stu; /*声明结构体类型struct student,并取别名为stu*/

int n;

stu *creat(void) /*创建动态链表函数*/

{

stu *head,*p1,*p2; /*定义结构体类型的指针*/

n=0;

p1=p2=(stu *)malloc(LEN);/*开辟一个内存空间*/

scanf("%d,%d,%f",&p1->num,&p1->age,&p1->score);/*输入结构体类型的数据*/

head=NULL; /*头指针置空*/

while(p1->num!=0) /*判断学号输入是否为0,若是0则跳出循环*/

{

n=n+1;

if(n==1)head=p1; /*判断是否是输入的第1个数据信息,若是第一个数据信息,则将头指针指向p1*/

else

p2->next=p1; /*将p2指向的下一个地址指向p1*/

p2=p1; /*p2指向p1*/

p1=(stu *)malloc(LEN);/*再次为p1开辟一个内存空间,存储下一个数据*/

scanf("%d,%d,%f",&p1->num,&p1->age,&p1->score);

}

p2->next=NULL; /*p2指向下一个地址指向的是空指针*/

return(head); /*返回数据信息的头指针,以便从头输出*/

}

int main()

{

stu *p,*head;

head=creat();

p=head; /*p指向头指针*/

if(head!=NULL) /*判断头指针是否为空,不为空则执行循环体输出信息*/

do

{

printf("%d,%d,%f\n",p->num,p->age,p->score);

p=p->next;

}while(p!=NULL);

}


分享到:
精彩评论 2
zhangrenjie84
学分:7 LV1
2020-01-14
沙发

有人否

李木子
学分:2954 LV11
2020-03-02
板凳

你好:

   这段代码没有释放 想要释放 需要重新编写一个函数 可以参考https://blog.csdn.net/zxccaoya/article/details/53173193

首页上一页 1 下一页尾页 2 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照