- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[常见的内存错误及其对策
常见的内存错误及其对策 特点 编译器不能自动发现这类错误,通常是在程序运行时才能捕捉到 时隐时现,无明显症状 分类 内存分配未成功,却使用了它 内存分配成功,但是尚未初始化就引用它 内存分配成功,并且已经初始化,但操作越过了内存的边界 忘记了释放内存,造成内存泄漏 释放了内存,却继续使用它 常见的内存错误及其对策 常见错误1: 内存分配未成功,却使用了它 起因 没有意识到内存分配会不成功 编程新手容易犯 解决对策 在使用内存之前,检查指针是否为空指针(NULL) if (p == NULL) { printf(No enough memory!\n); exit(0); } 常见的内存错误及其对策 常见错误2: 内存分配成功,但是尚未初始化就引用它 起因 没有初始化的观念 误以为内存的默认值全为0 解决对策 即使是赋0值也不可省略,不要嫌麻烦 常见的内存错误及其对策 常见错误3: 内存分配成功,并且已经初始化,但操作越过了内存的边界 例如:使用数组时经常发生下标“多1”或者“少1”的操作 解决对策: 在for语句中,注意循环次数不要搞错 常见的内存错误及其对策 常见错误4: 忘记释放内存,造成内存泄漏(Memory Leak) “内存泄露”一词类似“原料泄露” 泄露出去的原料不能被利用,导致生产过程中原料不足 好比借东西不还 如果申请来的内存不用,别的程序也不能用,就好像这块内存泄露出去一样,造成浪费 常见的内存错误及其对策 特征 含有这种错误的函数,每被调用一次,就丢失一块内存(制造内存垃圾) 刚开始时,系统内存充足,看不到任何错误 当系统运行相当一段时间后,就会突然死掉,出现提示:内存耗尽 需长期稳定运行的服务程序对内存泄漏最敏感 严重程度取决于 每次遗留内存垃圾的多少 代码被调用的次数 常见的内存错误及其对策 解决对策 在需要的时候才malloc,并尽量减少malloc的次数 malloc的执行效率就不高,过多的malloc使程序性能下降 能用自动变量解决的问题,就不要用malloc来解决 malloc一般在大块内存分配和动态内存分配时使用 重复使用malloc申请到的内存 尽量让malloc和与之配套的free在一个函数或模块内 尽量把malloc集中在函数的入口处,free集中在函数的出口处 以上做法只能尽量降低产生泄露的概率。完全杜绝内存泄露,关键要靠程序员的细心与责任感 一个例子 void Init(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; } 一个例子 void Init(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),只是该地址对应的内存是垃圾 指向垃圾内存的指针是“野指针” 常见的内存错误及其对策 char* GetInput(void){ char s[80]; scanf(%s, s); return s;} warning C4172:
您可能关注的文档
- (腾讯决战.ppt
- [一个无须编程将原软件.doc
- [尿液干化学与沉渣.ppt
- [尿液检验.ppt
- [一个机器人机械臂与封闭的运动链的基于的控制.docx
- [一个特点鲜明的人字.docx
- [尿液检验标准化、质控进展.ppt
- [一个电子商务公司组织架构.doc
- [居里夫人传高一语文语文版必修二第一单元精魂动天.ppt
- [屈琼作文.ppt
- 2025年社区中医药健康服务体系建设与发展规划报告.docx
- 艺术教育领域2025年直播平台市场细分与用户画像研究.docx
- 2025年美团本地生活服务行业供应链分析报告.docx
- 艺术教育行业线上直播平台构建与2025年品牌营销策略研究.docx
- 2024-2025学年度河北省单招考试一类 《文化素质数学》考前冲刺练习试题附参考答案详解【完整版】.docx
- 2024-2025学年度河北省单招考试一类 《文化素质数学》考前冲刺练习题【预热题】附答案详解.docx
- 2025年工业互联网平台传感器网络自组网技术在智慧城市中的关键技术研究报告.docx
- 游戏化学习在2025年儿童健康运动教育中的应用与实践.docx
- 2025年制造业高端产品市场趋势分析报告.docx
- 零售企业数字化供应链协同与供应链协同效率提升策略研究报告.docx
最近下载
- 成都电子科技大学实验中学新初一均衡分班语文试卷.doc VIP
- 成都电子科技大学实验中学新初一分班数学试卷含答案.doc
- 固体废物热值测定实验.doc VIP
- 14J936变形缝建筑构造.pptx VIP
- ZrO2-III 液晶显示氧化锆氧量分析仪说明书.pdf VIP
- 轻松学中医系列——《药性赋》选讲-曾培杰.docx
- Schneider Electric施耐德EvoPacT™ HVX 12kV真空断路器 全新一代数字化中压配电产品 操作手册安装和用户指南(中文).pdf
- 数控车削加工技术课程思政教学改革实践案例.docx VIP
- KORG科音Pa700快速说明书.pdf
- 2025年6月浙江省杭州市高一地理学考模拟试卷 1 .pdf VIP
文档评论(0)