常见的内存错误及其对策精.ppt
《常见的内存错误及其对策精.ppt》由会员分享,可在线阅读,更多相关《常见的内存错误及其对策精.ppt(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、常见的内存错误及其对策常见的内存错误及其对策常见的内存错误及其对策常见的内存错误及其对策第1页,本讲稿共15页常见的内存错误及其对策常见的内存错误及其对策 常见错误常见错误1:内存分配未成功,却使用了它内存分配未成功,却使用了它内存分配未成功,却使用了它内存分配未成功,却使用了它 起因起因没有意识到内存分配会不成功没有意识到内存分配会不成功没有意识到内存分配会不成功没有意识到内存分配会不成功编程新手容易犯编程新手容易犯编程新手容易犯编程新手容易犯 解决对策解决对策在使用内存之前,检查指针是否为空指针(在使用内存之前,检查指针是否为空指针(在使用内存之前,检查指针是否为空指针(在使用内存之前,检
2、查指针是否为空指针(NULLNULL)ifif(p=NULL)(p=NULL)printf(No enough memory!n);printf(No enough memory!n);exit(0);exit(0);第2页,本讲稿共15页常见的内存错误及其对策常见的内存错误及其对策 常见错误常见错误2 2:内存分配成功,但是尚未初始化就引用它内存分配成功,但是尚未初始化就引用它内存分配成功,但是尚未初始化就引用它内存分配成功,但是尚未初始化就引用它 起因起因没有初始化的观念没有初始化的观念没有初始化的观念没有初始化的观念误以为内存的默认值全为误以为内存的默认值全为误以为内存的默认值全为误以为
3、内存的默认值全为0 0 0 0 解决对策解决对策即使是赋即使是赋即使是赋即使是赋0 0 0 0值也不可省略,不要嫌麻烦值也不可省略,不要嫌麻烦值也不可省略,不要嫌麻烦值也不可省略,不要嫌麻烦第3页,本讲稿共15页常见的内存错误及其对策常见的内存错误及其对策 常见错误常见错误3:内存分配成功,并且已经初始化,但操作越过了内存的内存分配成功,并且已经初始化,但操作越过了内存的内存分配成功,并且已经初始化,但操作越过了内存的内存分配成功,并且已经初始化,但操作越过了内存的边界边界边界边界例如:例如:例如:例如:使用数组时经常发生下标使用数组时经常发生下标使用数组时经常发生下标使用数组时经常发生下标“
4、多多多多1”1”或者或者或者或者“少少少少1”1”的操的操的操的操作作作作 解决对策:解决对策:在在在在forfor语句中,注意循环次数不要搞错语句中,注意循环次数不要搞错第4页,本讲稿共15页常见的内存错误及其对策常见的内存错误及其对策 常见错误常见错误4:忘记释放内存,造成忘记释放内存,造成忘记释放内存,造成忘记释放内存,造成内存泄漏内存泄漏内存泄漏内存泄漏(Memory Leak)(Memory Leak)“内存泄露内存泄露”一词类似一词类似“原料泄露原料泄露”泄露出去的原料不能被利用,导致生产过程中原料不泄露出去的原料不能被利用,导致生产过程中原料不泄露出去的原料不能被利用,导致生产过
5、程中原料不泄露出去的原料不能被利用,导致生产过程中原料不足足足足好比借东西不还好比借东西不还好比借东西不还好比借东西不还如果申请来的内存不用,别的程序也不能用,就如果申请来的内存不用,别的程序也不能用,就好像这块内存泄露出去一样,造成浪费好像这块内存泄露出去一样,造成浪费第5页,本讲稿共15页常见的内存错误及其对策常见的内存错误及其对策 特征特征含有这种错误的函数,每被调用一次,就丢失一含有这种错误的函数,每被调用一次,就丢失一块内存(制造内存垃圾)块内存(制造内存垃圾)刚开始时,系统内存充足,看不到任何错误刚开始时,系统内存充足,看不到任何错误刚开始时,系统内存充足,看不到任何错误刚开始时,
6、系统内存充足,看不到任何错误当系统运行相当一段时间后,就会突然死掉,出当系统运行相当一段时间后,就会突然死掉,出现提示:内存耗尽现提示:内存耗尽需长期稳定运行的服务程序对内存泄漏最敏感需长期稳定运行的服务程序对内存泄漏最敏感需长期稳定运行的服务程序对内存泄漏最敏感需长期稳定运行的服务程序对内存泄漏最敏感严重程度取决于严重程度取决于严重程度取决于严重程度取决于 每次遗留内存垃圾的多少每次遗留内存垃圾的多少每次遗留内存垃圾的多少每次遗留内存垃圾的多少 代码被调用的次数代码被调用的次数代码被调用的次数代码被调用的次数第6页,本讲稿共15页常见的内存错误及其对策常见的内存错误及其对策 解决对策解决对策
7、在需要的时候才在需要的时候才在需要的时候才在需要的时候才mallocmalloc,并尽量减少,并尽量减少,并尽量减少,并尽量减少mallocmalloc的次数的次数的次数的次数 mallocmalloc的执行效率就不高,过多的的执行效率就不高,过多的的执行效率就不高,过多的的执行效率就不高,过多的mallocmalloc使程序性能下降使程序性能下降使程序性能下降使程序性能下降 能用自动变量解决的问题,就不要用能用自动变量解决的问题,就不要用能用自动变量解决的问题,就不要用能用自动变量解决的问题,就不要用mallocmalloc来解决来解决来解决来解决 mallocmalloc一般在大块内存分配
8、和动态内存分配时使用一般在大块内存分配和动态内存分配时使用一般在大块内存分配和动态内存分配时使用一般在大块内存分配和动态内存分配时使用重复使用重复使用重复使用重复使用mallocmalloc申请到的内存申请到的内存申请到的内存申请到的内存尽量让尽量让尽量让尽量让mallocmalloc和与之配套的和与之配套的和与之配套的和与之配套的freefree在一个函数或模块内在一个函数或模块内在一个函数或模块内在一个函数或模块内 尽量把尽量把尽量把尽量把mallocmalloc集中在函数的入口处,集中在函数的入口处,集中在函数的入口处,集中在函数的入口处,freefree集中在函数的出口集中在函数的出口
9、集中在函数的出口集中在函数的出口处处处处 以上做法只能尽量降低产生泄露的概率。完全杜以上做法只能尽量降低产生泄露的概率。完全杜绝内存泄露,关键要靠程序员的细心与责任感绝内存泄露,关键要靠程序员的细心与责任感第7页,本讲稿共15页一个例子一个例子voidvoid Init(Init(voidvoid)pszMyName=(pszMyName=(charchar*)malloc(256);*)malloc(256);ifif(pszMyName=NULL)(pszMyName=NULL)returnreturn;pszHerName=(pszHerName=(charchar*)malloc(25
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 常见 内存 错误 及其 对策
限制150内