动态内存分配函数.ppt

  1. 1、本文档共42页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
动态内存分配函数

数据结构 DATA STRUCTURE ——C语言描述 引 数据结构讨论的范畴——数据抽象 引 数据结构讨论的范畴——程序设计 引 数据结构讨论的范畴——数据结构 数据结构的重要性 注意事项 最终成绩:作业+上机实习报告+考勤+考试 按时按量完成作业,不要抄袭,就算抄也要动着脑筋抄 学过的内容有条件的话尽量编程实现 作业用本子不要纸方便留作资料;随身携带,会有随堂作业 课内参考书目 1.数据结构(C语言版),严蔚敏 吴伟民,清华大学出版社,1997年4月第一版 2.数据结构题集(C语言版),严蔚敏 吴伟民,清华大学出版社,1999年2月第一版 3.数据结构 ——使用c语言,朱站立,西安交大出版社 第0章 结构化程序设计、c语言 重点回顾 什么是“计算机”? 图灵机 1937(计算机理论之父) 是么是 “算法” ? 问题的可计算性 人工智能的界限 冯 · 诺依曼思想 1946(现代计算机之父) 1.? 用二进制代码表示程序和数据; 2.? 计算机采用存储程序的工作方式; 3.? 计算机硬件由存储器、运算器、控制 器、输入设备和输出设备组成。 结构化程序设计 使用顺序结构、选择结构、循环结构以及它们的组合来组织一个程序。 采用自顶向下逐步求精的方法编写程序。 内存地址 指针变量 存放地址的变量称为指针变量,它用来指向另一个变量,通常用*表示。 指针操作 :取变量的首地址,即指针; *:取指针所指向的地址中的值; 内存管理和函数调用 计算机采用存储程序的工作方式 程序内各成分在计算机中的存储: 代码段(程序) 数据段(全局、静态) 系统栈(局部、形参) 堆 (动态) 函数调用中究竟发生了什么? 参数传递 函数间传递数据有四种方式:值传递方式;地址传递方式;返回值传递方式;全局变量传递。 例设计一个数据交换函数swap( ),实现两个数的交换 用 结构体+指针 实现的链式单元 Typedef 的用途 代码简化 (别名) struct?tagPOINT1 { ????int?x; ????int?y; }; struct?tagPOINT1?p1;? typedef?struct?tagPOINT { ????int?x; ????int?y; }POINT; POINT?p1;?//?这样就比原来的方式少写了一个struct,比较省事,尤其在大量使用的时候 跨平台开发 动态内存分配函数简介 动态内存分配 在前面的程序设计中,存在一个问题,就是在编写程序时,因为无法确定要处理数据的规模,在定义变量时就为它说明一个特别大的空间,这对内存资源利用和程序设计都是不利的。我们希望,计算机能按需分配内存,在运行时需要多大的空间就分配多大的空间。 上面提出的问题,实际上是计算机内存的动态管理问题。 动态内存分配函数 malloc()函数 其函数原型为: void *malloc(unsigned int size); 其功能是:分配一块长度为size字节的连续空间,并将该空间的首地址作为函数的返回值。如果函数没有成功执行,返回值为空指针(NULL或0)。由于返回的指针的基类型为void,应该通过显式类型转换后才能存入其他基类型的指针变量中,否则会有警告提示。 例如: int *p; p=(int *)malloc(sizeof(int)); 动态内存分配函数 free()函数 其函数原型为: void free(void *block); 其功能是:释放以前分配给指针变量block的动态空间,但指针变量block不会自动变成空指针。 数组(静态、动态)和指针 静态 : int x; int A[10]; int y; 动态 : int x; int *pA; int y; 动态数组定义和使用流程 定义指针(数组名) Datatype *pA; 分配内存空间 pA=(Datatype *)malloc(sizeof(Datatype)*数组大小)); 初始化 for (;;) pA[i] = … 使用 结束前释放空间 free(pA); pA=NULL; 二维动态数组内存分配示意图 动态分配常犯的错误 1)内存分配未成功,却使用了它。 ? 2)内存分配虽然成功,但是尚未初始化就引用它。 ? 3)内存分配成功并且已经初始化,但操作越过了内存的

文档评论(0)

wujianz + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档