程序运行时,内存占用会越来越多,可是程序退出后,并没有发现内存泄漏,

zcy_beijing 2005-10-10 04:58:20
不知道有什么好的调试工具知道是哪个动态库新分配了内存?因为我的程序中使用的动态库较多,大概有10几个,现在不知道是什么原因造成的,查看代码也没有发现没有释放内存的地方,请大家分析一下原因,给出定位问题的办法,谢谢!
...全文
562 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
koko1998 2005-10-26
  • 打赏
  • 举报
回复
也有可能你是用了CArray来存贮大量的数据。是的话,可能出出现大连内存耗用的情况

CArray内存的分配是动态的,刚开始的时候比较小,如果数据多了,他就会继续分配内存,如果没有如果的空间去分配该数据的话。他将时候内存copy,在另一个所谓足够的空间中从新分配,以此类推 无用的空间由system来释放。

不过,我想如果是这样的话,也不该出现死机的现象。windows的管理还是很可靠的呀。

在仔细看看吧
jason176374 2005-10-26
  • 打赏
  • 举报
回复
MSI.dll,CSCUI.dll用工具看里面的导出函数啊.
然后看DLL的相互调用层次,就知道是什么时间调用的了.

有可能是你调用的DLL再去调用的.
zcy_beijing 2005-10-24
  • 打赏
  • 举报
回复
除了使用的openssl的库外,其他的dll都是自己写的。我仔细检查过所有分配内存的地方,确定都释放了,也就是有new的地方肯定有相应的delete,有malloc的地方有free,但是还是遇到这个问题。另外程序中用了ADO访问Access数据库,我是使用一个Connection,后面要访问数据时用_RecordsetPtr ,先open后close,再release了,应该也没有问题啊。
ncucf 2005-10-24
  • 打赏
  • 举报
回复
不过数据库访问,是会内存占用越来越多的,好像ado自己会维护一个内存池,我们根本无法回收那些资源,就是说,如果你不断的添加记录,就会不断的增加内存占有,除非你完全释放ado连接,再重新连接ado!
即使new之后都有delete,还是可能存在泄漏啊,有时候看是不是用错了return语句,比如没释放就返回,或者发生了意外,强制退出函数了,注意用try{}catch{}捕捉!
大菠菜 2005-10-23
  • 打赏
  • 举报
回复
楼上说的对!
ncucf 2005-10-22
  • 打赏
  • 举报
回复
程序退出后,当然不会有内存泄漏了,系统能够保证进程退出,回收所有的资源!
不要过多怀疑dll有泄漏(如果不是你自己做的dll话!),多看看自己的代码,比如专门找malloc和new关键字,大概问题都出在自己的不小心上!
zcy_beijing 2005-10-11
  • 打赏
  • 举报
回复
我调试时,通过BoundsChecker查看使用内存情况,一边用任务管理器看,调试时发现,使用任务管理器查看应用使用的内存变大了,可是BoundsChecker没有发现新的内存使用,不知道为什么?
ufox 2005-10-10
  • 打赏
  • 举报
回复
既然使用了BoundsCheck,那你可以知道内存泄漏的代码调用堆栈啊,这样就能够找到你的代码分配内存的地方的
zcy_beijing 2005-10-10
  • 打赏
  • 举报
回复
我用BoundsCheck调试了一下,发现新占用的内存都是MSI.dll,CSCUI.dll占用的,可是我的程序中并没有调用这两个库,如何释放它们占用的内存呢?
zcy_beijing 2005-10-10
  • 打赏
  • 举报
回复
跑久了,占用系统内存越来越多,最后系统就崩了。
DentistryDoctor 2005-10-10
  • 打赏
  • 举报
回复
内存占用会越来越多?跑个较长的时间试试呢,比如一天?

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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