求助内存泄漏的定位问题

mark21 2006-08-20 12:27:28
开发环境: vc 6.0 + MFC

程序退出后output:
Detected memory leaks!
Dumping objects ->
{12004} normal block at 0x0148E028, 902 bytes long.
Data: <000009029999<Dat> 30 30 30 30 30 39 30 32 39 39 39 39 3C 44 61 74
{11890} normal block at 0x0149F028, 1804 bytes long.
Data: <000009029999<Dat> 30 30 30 30 30 39 30 32 39 39 39 39 3C 44 61 74
{11851} normal block at 0x01463828, 1869 bytes long.
Data: <000000650002<Pos> 30 30 30 30 30 30 36 35 30 30 30 32 3C 50 6F 73
{11218} normal block at 0x014502C8, 2429 bytes long.
Data: <000042139999<Dat> 30 30 30 30 34 32 31 33 39 39 39 39 3C 44 61 74
{10712} normal block at 0x01482240, 2758 bytes long.
Data: <000044259999<Dat> 30 30 30 30 34 34 32 35 39 39 39 39 3C 44 61 74
{10589} normal block at 0x0143DFB0, 3903 bytes long.
Data: <000011459999<Dat> 30 30 30 30 31 31 34 35 39 39 39 39 3C 44 61 74
{9456} normal block at 0x01463570, 632 bytes long.
Data: <000008259999<Dat> 30 30 30 30 30 38 32 35 39 39 39 39 3C 44 61 74
{9356} normal block at 0x01463028, 1277 bytes long.
Data: <000006459999<Dat> 30 30 30 30 30 36 34 35 39 39 39 39 3C 44 61 74
{9190} normal block at 0x01433FB0, 3373 bytes long.
Data: <000020969999<Dat> 30 30 30 30 32 30 39 36 39 39 39 39 3C 44 61 74
{8291} normal block at 0x0143D028, 3903 bytes long.
Data: <000046269999<Dat> 30 30 30 30 34 36 32 36 39 39 39 39 3C 44 61 74
{6814} normal block at 0x0144C040, 2795 bytes long.
Data: <000193729999<Dat> 30 30 30 31 39 33 37 32 39 39 39 39 3C 44 61 74
strcore.cpp(118) : {6451} normal block at 0x01438830, 41 bytes long.
Data: < time> 01 00 00 00 1C 00 00 00 1C 00 00 00 74 69 6D 65
{6218} normal block at 0x01436878, 1286 bytes long.
Data: <000012869999<Dat> 30 30 30 30 31 32 38 36 39 39 39 39 3C 44 61 74
strcore.cpp(118) : {6216} normal block at 0x014416C0, 41 bytes long.
Data: < time> 01 00 00 00 1C 00 00 00 1C 00 00 00 74 69 6D 65
{5174} normal block at 0x0144DA00, 522 bytes long.
Data: <000005229999<Dat> 30 30 30 30 30 35 32 32 39 39 39 39 3C 44 61 74
Object dump complete.

无法直接定位,每次运行申请资源的顺序号{XXX}会变,有高手帮忙分析一下,或者指点一下如何定位。100分等候!
...全文
343 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
he_sl 2006-10-31
  • 打赏
  • 举报
回复
mark
WooSir 2006-08-22
  • 打赏
  • 举报
回复
strcore.cpp(118) : {6451} normal block at 0x01438830, 41 bytes long.
Data: < time> 01 00 00 00 1C 00 00 00 1C 00 00 00 74 69 6D 65
{6218} normal block at 0x01436878, 1286 bytes long.
Data: <000012869999<Dat> 30 30 30 30 31 32 38 36 39 39 39 39 3C 44 61 74
strcore.cpp(118) : {6216} normal block at 0x014416C0, 41 bytes long.
Data: < time> 01 00 00 00 1C 00 00 00 1C 00 00 00 74 69 6D 65
可以肯定的是这两处是CString对象引起的错误,看看程序中用到了哪些全局的CString对象(尤其是动态改变过的),退出时先调用Empty(),可以解决全局的CString对象退出时引起的泄漏。
Bible_Chou 2006-08-21
  • 打赏
  • 举报
回复
bounds checker
这个工具很不错。
templarzq 2006-08-21
  • 打赏
  • 举报
回复
mark
asdwwe2004 2006-08-21
  • 打赏
  • 举报
回复
先用大家提供的工具试试

实在没辙

就一点一点排除吧
mark21 2006-08-21
  • 打赏
  • 举报
回复
谢谢上面的各位,你们的提供的信息很有帮助。
还有人有更好的建议么,没有我就散分了。
ssbelle 2006-08-21
  • 打赏
  • 举报
回复
bounds checker
这个工具很不错。

-------------
嗯 俺们用的是DevPaterner
SnowOnSahara 2006-08-21
  • 打赏
  • 举报
回复
字符串“000...”类似的地方。
GoAround 2006-08-20
  • 打赏
  • 举报
回复
在源文件开头#inlucde之后加上
#define new DEBUG_NEW
DentistryDoctor 2006-08-20
  • 打赏
  • 举报
回复
http://www.codeproject.com/tools/visualleakdetector.asp
VLD(Visual Leal Detector),一个检查内存泄漏的强大工具!
WooSir 2006-08-20
  • 打赏
  • 举报
回复
不一定就是字符串的问题,看看你那些地方动态分配了内存而没释放的。还有就是一些动态增长的对象,注意不用时清理。
观察哪个对象的成员变量或其他非类成员变量(可能需动态分配内存的)的地址等于以下地址
0x0148E028
0x0149F028
.......
比较麻烦,看起来不止一个函数内存在泄漏。祝你好运!
mark21 2006-08-20
  • 打赏
  • 举报
回复
-_-| Rational purify 是要银子的...我们装不起
mark21 2006-08-20
  • 打赏
  • 举报
回复
To krh2001:

由于是C/S结构,在集成之前程序是没有内存泄漏的,而且有一部分代码在未集成之前是走不到的,只能在集成之后连通网络之后才用到,集成之后发现有内存泄漏,很可能不是我这边的问题(其中有一部分编码解码代码是C, S公用的)。我现在就是想定位哪边的错误。
iihero_ 2006-08-20
  • 打赏
  • 举报
回复
使用purify定位成功以后,给我散分吧。呵呵。
iihero_ 2006-08-20
  • 打赏
  • 举报
回复
晕死,你们居然没有用过Rational Purify来检测内存泄漏,使用很方便,很快就能定位到哪个类哪个方法导致内存泄漏。
jerry 2006-08-20
  • 打赏
  • 举报
回复
写了这么多代码才想到检测内存泄漏,

这种问题是最难找的了. 现在没办法了. 要不你可以看看诊断出的数据,看看可能是哪里的字符串.
不然只能一点点地排除了. 没有更好的办法
GoAround 2006-08-20
  • 打赏
  • 举报
回复
请确认每个源文件都有

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
GoAround 2006-08-20
  • 打赏
  • 举报
回复
如果所有的源文件都是通过MFC class wizard加的吗?如果是,那就只能用purify等工具检查了。

我看像是collection类的问题
mark21 2006-08-20
  • 打赏
  • 举报
回复
字符串太多了,接近40k行代码,而且还有动态连接库,我需要准确定位。
mark21 2006-08-20
  • 打赏
  • 举报
回复
#define new DEBUG_NEW
MFC程序是自动+的,不然不会有memory leak 监测到。
加载更多回复(1)

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧