中国高校课件下载中心 》 教学资源 》 大学文库

《计算机程序设计基础》课程PPT教学课件(C语言)第6章 指针进阶与内存空间管理 6.4 动态内存分配

文档信息
资源类别:文库
文档格式:PPTX
文档页数:8
文件大小:1.11MB
团购合买:点击进入团购
内容简介
《计算机程序设计基础》课程PPT教学课件(C语言)第6章 指针进阶与内存空间管理 6.4 动态内存分配
刷新页面文档预览

武汉理工大学计算机学院信也技术员000000000000009000000计算机程序设计基础C语言900主讲教师:吕曦武汉理工大学Wuhan Universityof Technology

主讲教师:吕 曦

计算机程序设计基础语言0动态内存分配电电电中武汉理工大学Wuhan Universityof Technology

计算机程序设计基础C语言 ⚫ 动态内存分配

动态内存分配1.堆(heap)是指未使用的内存空间。2.内存分配函数mal1oc()和ca1loc()用于建立受保护的堆内存区域。例如对于整型指针 int *t;t=(int*)malloc(lo*sizeof(int));或 t=(int *)calloc(lo,sizeof(int));在堆上分配了10个整数。3.函数free()释放指定的堆空间。4.malloc()的返回值的是一个通用类型指针。可以用(int*)转成整形指针,也可转化为其他类型指针。5.用mal1loc()的好处是可以在程序中随时开辟指定大小的堆空间,并当做数组使用。6.若内存分配失败,malloc()返回null值。因此,通常用if(!t)exit(1);来建立错误陷阱

1.堆(heap)是指未使用的内存空间。 2.内存分配函数malloc()和calloc()用于建立受保护的堆内存区域。例如 对于整型指针 int *t; t=(int *)malloc(10*sizeof(int)); 或 t=(int *)calloc(10,sizeof(int)); 在堆上分配了10个整数。 3.函数free()释放指定的堆空间。 4.malloc()的返回值的是一个通用类型指针。 可以用(int *)转成整形指针,也可转化为其他类型指针。 5.用malloc()的好处是可以在程序中随时开辟指定大小的堆空间,并当做数 组使用。 6.若内存分配失败,malloc()返回null值。 因此,通常用if(!t)exit(1);来建立错误陷阱

例:使用堆内存实现动态数组main()(int *t,i,n=10;t=(int*)malloc(n*sizeof(int))if(!t)printf("无足够内存"),exit(1);for(i=o;i<n;i++)t[i]=rand()%1o1printf("%4d",t[i]);free(t);getch() ;1

main(){ int *t,i,n=10; t=(int *)malloc(n*sizeof(int)); if(!t) printf("无足够内存"),exit(1); for(i=0;i<n;i++) t[i]=rand()%101, printf("%4d",t[i]); free(t); getch(); }

下图说明了上例中malloc函数调用的结果:堆中现在建立了一块由n个整数组成的受保护区域而且名为t的整型指针变量指向第1个整数。堆

●t 堆

例:求某班级某门成绩的平均分,并且班级的人数在程序运行时确定(1)#include#include #includeint main(void)(int i;float total score,average;float *student score;int number;printf("How many students in the class?");scanf("%d",&number);studentscore=(float*)calloc(number,sizeof(float));//也可使用(float*)malloc(number*sizeof(float));if(student score==NULL)(printf("Not enough memory!");exit(1);1total score=o;

#include #include #include int main(void){ int i; float total_score,average; float *student_score; int number; printf("How many students in the class?"); scanf("%d",&number); student_score=(float*)calloc(number,sizeof(float)); //也可使用(float*)malloc(number*sizeof(float)); if(student_score==NULL){ printf("Not enough memory!"); exit(1); } total_score=0;

例:求某班级某门成绩的平均分,并且班级的人数在程序运行时确定(2)for(i=o;i<number;i++)(printf("please input a student score:");scanf("%f",&studentscore[il);total score+=student score[il;力average=total score/number;printf("average score=%fln",average);free(student score);studentscore=NULL;//可以不写这1句getch();力

for(i=0;i<number;i++){ printf("Please input a student score:"); scanf("%f",&student_score[i]); total_score+=student_score[i]; } average=total_score/number; printf("average score=%f\n",average); free(student_score); student_score=NULL;//可以不写这1句 getch(); }

动态内存分配的知识点用mal1oc()和free()函数来分配和释放堆内存。在malloc()的括号中使用sizeof()运算符来精确地告诉malloc()每次必须分配多大的内存。只要定义指针变量,用ma11oc()把数据放在堆中,就可以实现(一维)数组。如果要同时开辟几块堆内存(也就是二维数组),就使用指针数组。每个数组元素都可以指向不同数量的堆空间。检查ma11oc()分配的指针值是否为nu11,以确保内存分配正确。使用calloc()和mal1oc()动态分配的内存空间在函数退出时并不会返回给系统,必须使用free()函数释放空间

 用malloc()和free()函数来分配和释放堆内存。  在malloc()的括号中使用sizeof()运算符来精确地告诉malloc()每次必 须分配多大的内存。  只要定义指针变量,用malloc()把数据放在堆中,就可以实现(一维)数组。  如果要同时开辟几块堆内存(也就是二维数组),就使用指针数组。每个数组 元素都可以指向不同数量的堆空间。  检查malloc()分配的指针值是否为null,以确保内存分配正确。  使用calloc()和malloc()动态分配的内存空间在函数退出时并不会返回给 系统,必须使用free()函数释放空间

已到末页,全文结束
刷新页面下载完整文档
VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
相关文档