首页 > 代码库 > 内存泄露与内存访问越界
内存泄露与内存访问越界
内存泄露
在堆上分配的内存,没有及时释放掉,以便后面其它地方可以重用。在C/C++中,内存管理器不会帮你自动回收不再使用的内存。如果你忘了释放不再使用的内存,这些内存就不能被重用,就造成了所谓的内存泄露。
一两处内存泄露通常不至于让程序崩溃,也不会出现逻辑上的错误,当然了,量变会产生质变,一旦内存泄露过多以致于耗尽内存,后续内存分配将会失败,程序可能因此而崩溃。
内存访问越界,使用的内存 超出了 向系统申请了一块内存,覆盖该空间之后的一段存储区域,导致系统异常。
常见原因:
1 写越界,又叫缓冲区溢出:
向10个字节的数组写入了20个字节;内存操作越界,
如charszText[10];memset(szText,0,30); //访问越界了,10字节空间,修改了30字节
2 读越界,读了不属于自己的内存空间,所读地址无效,程序崩溃;地址有效,读到数据随机
排查内存越界错误的方法包括:
1.使用BoundChecker进行调试,BoundChecker在代码编译时加入了大量的附加处理,其中包括内存堆栈检测等,其实ms的debug模式也做了许多的类似操作,但debug模式下的一些代码行为,如初始化变量,和Release下的代码执行不同,所以用debug调试不是完美的方式
2.类内部出现莫名其妙的错误时,查看 this指针是否变化,必要的时候进行手手工检查3.在调试的 "查看" 窗口 输入:@err,hr 看全局错误变量的内容
4.注释掉部分代码,看是否错误还出现,注释的最佳方式是:二分法
5.查看程序异常处的反汇编代码,分析原因
6.最后的办法:代码复查
引用http://www.51testing.com/?uid-51504-action-viewspace-itemid-96444
内存泄露与内存访问越界
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。