C语言_第15章.ppt

上传人:少林足球 文档编号:4143422 上传时间:2019-10-22 格式:PPT 页数:13 大小:1.85MB
返回 下载 相关 举报
C语言_第15章.ppt_第1页
第1页 / 共13页
C语言_第15章.ppt_第2页
第2页 / 共13页
C语言_第15章.ppt_第3页
第3页 / 共13页
C语言_第15章.ppt_第4页
第4页 / 共13页
C语言_第15章.ppt_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《C语言_第15章.ppt》由会员分享,可在线阅读,更多相关《C语言_第15章.ppt(13页珍藏版)》请在三一文库上搜索。

1、第十五章 内存管理,第十五章 内存管理,15.1 内存组织形式 15.2 内存管理 15.3 内存丢失 15.4 实战练习,本章学习内容,15.1 内存组织形式,程序运行前,需要先被装载到内存中,内存组织形式分为4个逻辑段 1. 可执行代码 2. 静态数据:可执行代码和静态数据存储在内存的固定位置 3. 动态数据:程序请求中动态分配的内存,也就是堆 4. 栈:局部数据对象,函数参数以及调用函数和被调用函数的联系,15.1 内存组织形式,在内存存储空间中,用于程序动态分配和释放的内存块称为自由存储空间,通常称为堆 堆允许程序在运行时动态的申请内存空间 malloc()函数从堆中分配内存 free

2、()函数将内存释放到堆,15.1 内存组织形式,栈从数据结构角度来说,是一个后进先出的压入弹出式数据结构,包括栈顶指针和栈底指针 系统中的栈空间是系统用来自动处理的内存空间,程序中的局部对象、函数参数以及调用函数和被调用函数的联系,都存放在栈中,15.2 内存管理函数,15.2.1 malloc()函数 功能:在内存中动态的分配一块内存空间 形式:void * malloc(unsigned int size); /*size是分配内存块大小(字节)*/ 例如: int *p; p = (int *)malloc(sizeof(int);,15.2 内存管理函数,15.2.2 calloc()

3、函数 功能:在内存中分配n个长度为size字节的连续的内存空间 形式:void * calloc(unsigned int n, unsigned int size); 例如: int *arr; arr = (int *)calloc(5, sizeof(int);,15.2 内存管理函数,15.2.3 realloc()函数 功能:更改已经配置的内存空间,使指针重新指向一个内存空间 形式:void * realloc(void *ptr, size_t size); 例如: double *p = (double *)malloc(sizeof(double); int *q = real

4、loc(p, sizeof(int);,15.2 内存管理函数,15.2.4 free()函数 功能:释放内存空间 形式:void free(void *ptr); 例如: free(p);,15.3 内存丢失,使用malloc()函数、calloc()函数等动态分配内存空间后,需要使用free()函数释放内存空间。如果内存不进行释放会造成内存泄漏,从而最终消耗完所有的内存,导致系统崩溃,15.3 内存丢失,例如: p = (int *)malloc(sizeof(int); q = (int *)malloc(sizeof(int); 这两行代码分别分配了两块内存,如果进行如下操作。 p = q; 将q指向的内存地址赋给p,这个时候就会造成p原来指向的内存块丢失,因为此时没有任何指针指向这块内存,也就无法释放这块内存,q的值赋给p之后,再调用free()函数释放p或者q的时候: free(q); 或 free(p); 释放的都只是原先q指向的内存空间,而原先p指向的内存块无法得到释放,也就造成了内存丢失。,15.5 实践练习,1编写程序,定义student结构体类型,它包含学生的学号和姓名,为包含3个student类型的数组分配内存、赋值并输出,使用完后再对内存进行释放。 2编写程序,为二维数组进行动态分配内存和释放内存。,END,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1