C语言培训讲义6.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言培训教程 6 张建 2005-5 Budzhang@ 指针 指针的数据原型 指针是一种用于存放另一个变量的地址的变量 变量地址可能的情况 RAM ROM IO空间 CPU寄存器 编译器的代码基本上都把程序和数据分开 代码段 数据段 堆 栈 C如何使用内存空间1 C语言目标之一是可移植,对内存使用没有特别的规定 “内存”类型 const : ROM register : 寄存器 volatile : IO端口等多变源 auto : 局部变量 C如何使用内存空间2 存储类型 数据的逻辑含义 函数指针 : 代码 静态数据 : 数据段 自动数据 : 栈 动态数据 : 堆 指针的取值1 语言元素的取值 获取某个标识符(变量、函数)的地址 取址操作符 数组名、函数名都是地址 例子 练习 取出下面各类标识符的地址,并观察其特点 指针的取值2 动态内存 用malloc等函数动态分配的内存 此类地址需要free等函数明确释放 例子 指针的取值3 特定地址 明确指定一个已知地址(常数形式) 需要类型转换 函数指针语法较为“复杂” 例子 例子2 指针的取值4 NULL表示空指针 定义指针时要给一个指针赋初始NUL 操作系统一般提供保护措施 例子 指针的取值5 受系统保护的地址 操作系统的数据、代码不能被访问 Windows NT 0x7FFF0000开始不可访问 0后是操作系统空间 0x0000FFFF以下是NULL空间 0– 0x7FFEFFFF 供应用程序使用 练习 编写代码试验Windows NT的保护空间范围 内存使用的错误和防范1 内存使用的常见错误 数组越界 指针未赋初值 树节点、链表节点等节点指针维护错误 对malloc等函数没有检测其返回值 内存泄漏 内存使用的错误和防范2 内存使用的防范措施 提供专门的内存分配封装函数,来分配系统使用的主要的数据结构 在维护动态数据结构时,往往需要分配带有指针的节点。惯例上会设计专门的函数负责分配节点以及释放节点 将数据结构隔离开,使其互不影响 比如,一个链表和一个树结构,在内存区域上把他们分开存放,这样,对链表结构的操作错误也不至于影响到树结构的构造 为防止超出某一段内存地址范围,可以在该段地址边界处设置保护模式 比如,将边界内存段设置为不可读写。那么访问到达这些保护边界上就产生内存访问错误。(这是操作系统常采用的防护性策略) 内存泄漏的检测 观测法 运行多次,观测内存的占用 工具库 VC debug模式能监控内存泄漏 主动检测 采用二次分配方案时,可以在分配和释放函数里明确增加检测代码 函数指针和回调函数 函数指针 函数指针是C的一个极其重要的能力 函数指针最典型的使用模式:回调函数 回调函数 提供函数者不调用;而是传递给调用者 回调函数实例1 Windows 窗口函数 编程者实现窗口函数,并注册到Windows操作系统 操作系统调用窗口函数,处理消息 窗口函数1 窗口函数2 窗口函数3 Windows Hook Windows提供Hook机制允许监督消息传送过程 Windows允许同时安装多个hook,称之为hook链 一般而言,系统会依次调用hook链的每个函数 Hook可以监控键盘输入、窗口变动、模拟键盘输入等。。。 安装hook函数 XML解析器Expat库 expat库是业界最快速的xml解析器 expat通过回调函数向程序员提供xml文档的解析结果 Expat使用片段 作业 设计、实现一个内存泄漏检测方案 网上收集内存内存泄漏的检测方案 * * #include stdio.h int g_num; int main(int argc, char *argv[]) { int a; int b[10]; int c; printf(a=%p\n, a); //局部变量 printf(b=%p b=%p\n, b, b); //局部变量:数组 printf(c=%p\n, c); printf(g_num=%p\n, g_num); //全局变量 printf(main=%p main=%p\n, main, main); return 0; } int g_num=0; int hello(int p1, int p2) { int a; static int b=0; extern int c; a = p1 + p2 + b++ + c; return a; } #include stdio.h int main(int argc, char *argv[]) { int *pi=

文档评论(0)

iris + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档