奇怪,奇怪!

panacea 2000-09-01 09:55:00
各位大虾:
本人碰到个奇怪的问题,我做了一个类似资源管理器的东东,在2000下运行良好,但在98下,一运行或调试我的东东,关闭后就会使资源管理器和桌面上的所有Icon都丢失了,只剩下文字了,哪位能告诉我是什么原因造成的呢???
...全文
310 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
feelfree 2000-09-05
  • 打赏
  • 举报
回复
关注
Holly 2000-09-04
  • 打赏
  • 举报
回复
to aznarble:
实际上是有问题,Boundchecker并没有判断系统的Catch的问题,实际上FreeLibrary并不一定马上就把DLL从内存中释放,而是系统根据计数和资源的状况进行调配,所以可能真正的释放是FreeLibrary调用之后很长的一段时间之后!
不过使用Boundchecker时间久了,慢慢就知道它的脾气,知道哪些是真正的泄漏!
to panacea:
你的邮箱有多大?
aznarble 2000-09-04
  • 打赏
  • 举报
回复
绝大多数错误用BoundsChecker都可以检查出来,我使用的是6.2版,不知道价格是多少(公司大概花了七八千),许多地方有下载试用版,只是有时间限制。

关于使用BoundsChecker检查资源泄漏的问题一直困扰我到现在还没解决,我以前曾经发过帖子咨询。LoadLibrary并使用FreeLibrary释放了一个DLL后,BoundsChecker便报告了一个由LoadLibrary引发的Resource Leak。但奇怪的是占用DLL的句柄并不是我使用LoadLibrary的返回值,更奇怪的是我把LoadLibrary和FreeLibrary删除掉后,这个Resource Leak就消失了。我怀疑BoundsChecker自身也有些问题。
panacea 2000-09-04
  • 打赏
  • 举报
回复
Holly:
非常感谢你,我这边用ISDN,可以收,我的email是rachel@digital-chance.com,能否尽快给我?
panacea 2000-09-04
  • 打赏
  • 举报
回复
Holly:
我的oicq:515208
Holly 2000-09-04
  • 打赏
  • 举报
回复
to iforever:
当然可以!欢迎!OICQ:511345 ICQ:53246745
panacea 2000-09-04
  • 打赏
  • 举报
回复
Holly:
我的邮箱才5M,太小了。如果这样可以直接传到我们公司的服务器上,FTP地址是210.74.252.119,端口号是21,以匿名传就可以了。多谢!
另外,你有oicq吗?这样联系较为方便。
panacea 2000-09-04
  • 打赏
  • 举报
回复
Holly:
我的邮箱才5M,太小了。如果这样可以直接传到我们公司的服务器上,FTP地址是210.74.252.119,端口号是21,以匿名传就可以了。多谢!
iforever 2000-09-04
  • 打赏
  • 举报
回复
想和HOLLY交个朋友.
可以吗
Holly 2000-09-03
  • 打赏
  • 举报
回复
我这儿有6.5版的dps包含BoundsChecker6.5且在WIN9x/WIN2000下都可,只是有80M之多,如果你收的下来的话,我可以拆开发送给你!
Dlf 2000-09-01
  • 打赏
  • 举报
回复
你看一下是不是内存泄露问题,因为NT对内存的管理比98规整。如果有内存泄露,NT下很难暴露。
我以前有一个程序在NT4下运行一切正常,一到98下就不行了。
panacea 2000-09-01
  • 打赏
  • 举报
回复
请问aznarble和Holly,第三方的工具有哪些?Bounds Checker等工具哪儿可以找到呢?多谢!!!
Holly 2000-09-01
  • 打赏
  • 举报
回复
Sorry!
几位说的有些偏差!严格来说不是内存泄漏而是资源泄漏,而且aznarble也不必单步跟踪只要是用F5(go)状态运行程序不是Ctrl+F5(run),VC++通常会检测到内存的泄漏,但资源的泄漏无法检测,如果要检测需要用第三方的工具象aznarble所说!

注意:如果实在着急,又找不到这种工具,可以检查所有的使用资源的函数是否都有正确调用对应的释放函数,常见的合理配对使用有:
CreateObject(...)(实际可能是CreatePen,CreateBrush,CreateFont等)与DeleteObject()
GetDC()与ReleaseDC();
SelectObject()是否有再次调用以恢复以前的GDI Object;

CGdiObject* pOldObj = SelectObject(...);
...
SelectObject(pOldObj);

CreateDC() <-> DeleteDC();
实际需要的函数还有更多,我一下也想不起!

具体可用VC IDE提供的Find In Files辅助进行代码检查!
aznarble 2000-09-01
  • 打赏
  • 举报
回复
你的程序绝对占用了系统资源而没有释放。Win2000的系统保护机制比98强大的多,这是问题没有在Win2000下出现的原因。
建议在vc的debug模式下单步运行程序(一定要是单步!)。在程序退出后如果有内存泄漏vc会自动报告,并且会指出发生的行数。
如果还是检测不到,建议使用第三方的工具如Numega公司的Bounds Checker或Rational公司的Purify检测(同样要求是Debug模式)。前者推荐版本6.2,后者推荐4.0以上。两者均能集成到vc的IDE中。
panacea 2000-09-01
  • 打赏
  • 举报
回复
存在内存泄露,但一直查不出,没法跟踪

16,471

社区成员

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

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

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