hur.cn - 华软网

 热门搜索

内存溢出,导致程序消失,就很难定位错误代码段

  作者:未知    来源:网络    更新时间:2011/9/29
有没有办法通过异常捕获和日志输出来判断那里代码出错。
---华软 网友回答---
bounds check调试运行看看。

---华软网友回复---
在读写内存的地方都放上调试信息输出,看最后输出的信息是哪条就能知道哪出错了,仔细检查
---华软网友回复---
最笨的办法就是把代码一段段的注释掉,看会在哪里出问题
---华软网友回复---
首先,考虑最可能出现问题的地方,情况有两种,一种是访问空指针,另一种就是指针指向局部变量(对象)。
其次,检测动态分配内存的地方,并做些特殊处理,例如输出信息,指针指向的内容,大小等。
再次,加一些可以调试的代码,如ASSERT来验证每个传入和引用的指针正确。如果是继承自CObject的对象,还可以用ASSERT_VALID(对象指针)来验证对象的状态正确。
最后一点是,函数栈的大小是1MB,不是每个函数1MB,而是整体1MB,这里面存放的是函数内的局部变量(对象),较小的程序通常不会超过这个大小,这样的问题也很难见到。所以你可能需要检查一下在函数内有没有特别大的数组类的东西使用的是非new这样的定义(使用栈空间的定义),如果有,把它改为new,并在函数结束前将其delete。

把上面几点都做到,可以解决98%以上的问题。

---华软网友回复---
没楼上几位高超,
还是低端的下断点的路过。

---华软网友回复---
弹出异常的时候    点击【重试】  
然后看代码跳到哪个位置?
---华软网友回复---
程序出现内存泄露的确是一件很头痛的事情,碰到大型工程,就很麻烦了,根据个人经验,在写代码的时候考虑可能出现的饿情况,得多加错误诊断代码,防止程序崩溃。      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。