《计算机程序设计基础》课程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()函数释放空间
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 《计算机程序设计基础》课程PPT教学课件(C语言)第6章 指针进阶与内存空间管理 6.3 函数指针.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第4章 数组和指针 4-7 字符数组的输入与输出格式符%c %s.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第4章 数组和指针 4-8 字符数组的输入与输出函数gets与puts.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第4章 数组和指针 4-6 字符数组的定义与初始化.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第4章 数组和指针 4-10 字符串函数——strcat.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第4章 数组和指针 4-11 字符串函数——strcpy.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第4章 数组和指针 4-12 字符串函数——strcmp.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第4章 数组和指针 4-9 字符串函数——strlen.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第4章 数组和指针 4-14 指向数组的指针定义与初始化.ppt
- 《计算机程序设计基础》课程PPT教学课件(C语言)第4章 数组和指针 4-15 指针变量的运算——赋值运算.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第4章 数组和指针 4-16 指针变量的运算——算术运算.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第4章 数组和指针 4-13 字符串函数——大小写转换函数.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第3章 控制结构 3-1 基本控制结构.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第3章 控制结构 3-5 程序中的选择结构-switch语句.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第3章 控制结构 3-2 程序中的控制运算符.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第3章 控制结构 3-3 程序中的选择结构-if语句的简单形式.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第3章 控制结构 3-4 程序中的选择结构-if语句的嵌套形式.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第2章 基本数据类型和运算符 2-5 算术运算符和算术表达式.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第2章 基本数据类型和运算符 2-2 常量.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第2章 基本数据类型和运算符 2-1 基本数据类型.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第6章 指针进阶与内存空间管理 6.5 main()函数的命令行参数.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第6章 指针进阶与内存空间管理 6.2 指针数组.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第6章 指针进阶与内存空间管理 6.1 指针再认识.pptx
- 《数据结构》课程授课教案(讲义,共十章).pdf
- 《数据结构》课程实验指导书.pdf
- 《数据结构》课程教学资源(试卷习题)多套练习题及参考答案.pdf
- 《数据结构》课程教学资源(试卷习题)十套数据结构试题及参考答案.pdf
- 《数据结构》课程教学资源(知识点)数据结构各章重点难点.pdf
- 《数据结构》课程教学课件(讲稿,C语言描述)第9章 排序.pdf
- 《数据结构》课程教学课件(讲稿,C语言描述)第8章 查找.pdf
- 《数据结构》课程教学课件(讲稿,C语言描述)第6章 树.pdf
- 《数据结构》课程教学课件(讲稿,C语言描述)第7章 图.pdf
- 《数据结构》课程教学课件(讲稿,C语言描述)第4章 串.pdf
- 《数据结构》课程教学课件(讲稿,C语言描述)第2章 线性表.pdf
- 《数据结构》课程教学课件(讲稿,C语言描述)第5章 数组和广义表.pdf
- 《数据结构》课程教学课件(讲稿,C语言描述)第3章 栈和队列.pdf
- 《数据结构》课程教学课件(讲稿,C语言描述)第1章 绪论.pdf
- 《计算机组成原理》课程实验指导书.doc
- 《计算机组成原理》课程授课教案(讲稿,文字版).pdf
- 《计算机组成原理》课程教学资源(PPT课件)第七章 存储系统.ppt