




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
常见的内存错误及其对策 特点编译器不能自动发现这类错误 通常是在程序运行时才能捕捉到时隐时现 无明显症状分类内存分配未成功 却使用了它内存分配成功 但是尚未初始化就引用它内存分配成功 并且已经初始化 但操作越过了内存的边界忘记了释放内存 造成内存泄漏释放了内存 却继续使用它 常见的内存错误及其对策 常见错误1 内存分配未成功 却使用了它起因没有意识到内存分配会不成功编程新手容易犯解决对策在使用内存之前 检查指针是否为空指针 NULL if p NULL printf Noenoughmemory n exit 0 常见的内存错误及其对策 常见错误2 内存分配成功 但是尚未初始化就引用它起因没有初始化的观念误以为内存的默认值全为0解决对策即使是赋0值也不可省略 不要嫌麻烦 常见的内存错误及其对策 常见错误3 内存分配成功 并且已经初始化 但操作越过了内存的边界例如 使用数组时经常发生下标 多1 或者 少1 的操作解决对策 在for语句中 注意循环次数不要搞错 常见的内存错误及其对策 常见错误4 忘记释放内存 造成内存泄漏 MemoryLeak 内存泄露 一词类似 原料泄露 泄露出去的原料不能被利用 导致生产过程中原料不足好比借东西不还如果申请来的内存不用 别的程序也不能用 就好像这块内存泄露出去一样 造成浪费 常见的内存错误及其对策 特征含有这种错误的函数 每被调用一次 就丢失一块内存 制造内存垃圾 刚开始时 系统内存充足 看不到任何错误当系统运行相当一段时间后 就会突然死掉 出现提示 内存耗尽需长期稳定运行的服务程序对内存泄漏最敏感严重程度取决于每次遗留内存垃圾的多少代码被调用的次数 常见的内存错误及其对策 解决对策在需要的时候才malloc 并尽量减少malloc的次数malloc的执行效率就不高 过多的malloc使程序性能下降能用自动变量解决的问题 就不要用malloc来解决malloc一般在大块内存分配和动态内存分配时使用重复使用malloc申请到的内存尽量让malloc和与之配套的free在一个函数或模块内尽量把malloc集中在函数的入口处 free集中在函数的出口处以上做法只能尽量降低产生泄露的概率 完全杜绝内存泄露 关键要靠程序员的细心与责任感 一个例子 voidInit void pszMyName char malloc 256 if pszMyName NULL return pszHerName char malloc 256 if pszHerName NULL return pszHisName char malloc 256 if pszHisName NULL return free pszMyName free pszHerName free pszHisName return 错在哪里 一个例子 voidInit void pszMyName char malloc 256 if pszMyName NULL return pszHerName char malloc 256 if pszHerName NULL free pszMyName return pszHisName char malloc 256 if pszHisName NULL free pszMyName free pszHerName return free pszMyName free pszHerName free pszHisName return 常见的内存错误及其对策 常见错误5 释放了内存 却继续使用它起因 指针所指的内存被释放以后 并不表示指针会消亡其地址仍然不变 非NULL 只是该地址对应的内存是垃圾指向垃圾内存的指针是 野指针 free ptr if ptr NULL 不起作用 常见的内存错误及其对策 char GetInput void chars 80 scanf s s returns warningC4172 returningaddressoflocalvariableortemporary输出乱码voidGetInput char s scanf s s 错在哪里 不能把局部变量的地址作为返回值返回函数返回后 局部变量被释放 该地址的内存会被挪做它用 常见的内存错误及其对策 include includevoidGetInput char p p char malloc 100 程序崩溃 函数不能传递动态分配的内存 voidGetInput char p p char malloc 100 常见的内存错误及其对策 常见错误5解决对策尽量把malloc集中在函数的入口处 free集中在函数的出口处如果free不能放在函数出口处 则指针free后立即设置为NULL不要把局部变量的地址作为返回值返回 因为该内存在函数体结束时被自动销毁指针要么初始化为NULL 要么是其指向合法的内存 非法内存操作 起因内存分配未成功 却使用了它内存分配成功 但是尚未初始化就引用它内存分配成功 并且已经初始化 但操作越过了内存的边界释放了内存 却继续使用它基
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年建筑行业绿色建筑技术发展研究报告
- 2025年通讯科技行业5G技术应用前景与全球通信市场分析报告
- 注射用头孢他啶阿维巴坦钠临床应用考核试题
- 2025福建福州市罗源县社会救助协管员招聘1人模拟试卷及答案详解(全优)
- 2025内蒙古呼和浩特市玉泉区消防救援大队招聘4人模拟试卷带答案详解
- 2025年宁波市鄞州区第二医院医共体招聘第二批高层次紧缺人才13人考前自测高频考点模拟试题有完整答案详解
- 2025年上半年上海市卫生健康技术评价中心工作人员公开招聘模拟试卷有答案详解
- 2025年度江西各地供电服务有限公司招聘模拟试卷及答案详解(各地真题)
- 2025第十三届贵州人才博览会贵阳幼儿师范高等专科学校引进高层次及急需紧缺人才模拟试卷及参考答案详解1套
- 2025年度黑龙江省气象部门高校毕业生招聘4人(第三批次气象类)模拟试卷及答案详解(夺冠系列)
- 第一单元《精神信仰力量情感》《大路歌》教学设计湘艺版初中音乐八年级上册
- 人教版四年级数学上学期第1单元大数的认识综合素养评价卷(含答案)
- 2025外贸采购合同模板
- 体操保护与帮助课件
- “互联网+”大学生创新创业大赛计划书一等奖
- 工程后期服务的方案(3篇)
- 行政管理毕业论文8000
- 2025年湖南省高考历史真题(原卷版)
- 老年人脑卒中课件
- 2025年传媒行业编辑记者招聘笔试模拟题及答案全解
- 钢架油漆翻新施工方案(3篇)
评论
0/150
提交评论