请问:【DLL中资源泄漏,为什么???】+【参与有分】

kingfish 2002-11-18 02:31:37
很简单的一个myAbout.dll
如下:
#include "uAbout.h" //.cpp中仅一个form+closebutton
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//---------------------------------------------------------------------------
//
extern "C" void __declspec(dllexport) __stdcall DllShowAbout(void)
{
try {
fmAbout = new TfmAbout(NULL);
}
catch(Exception &e) {
Application->MessageBox( e.Message.c_str(), NULL, MB_ICONSTOP|MB_OK );
fmAbout = NULL;
}
fmAbout->ShowModal();
delete fmAbout;
fmAbout=NULL;
}


//另外一个程序中如下调用:
void __fastcall TfmMain::actAboutExecute(TObject *Sender)
{
HINSTANCE hd = LoadLibrary("myAbout.dll");
(void *)DllShowAbout = GetProcAddress(hd,"DllShowAbout");
DllShowAbout();
FreeLibrary(hd);
}

运行时正常,关闭程序时CodeGuard提示resource leak
:有一段SysGetMem分配的内存未释放


环境:w2k+sp3+BCB5
请问为什么?
...全文
51 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
hdaq 2002-11-19
  • 打赏
  • 举报
回复
to kingfish(今飞) ( )
没打开codeguard,但我认为代码应该没有问题。
kingfish 2002-11-19
  • 打赏
  • 举报
回复
找不到原因的话好像只能怀疑CodeGuard了

大家还用什么内存、资源泄漏检测工具,介绍介绍

可以交叉试试
yyfzy 2002-11-19
  • 打赏
  • 举报
回复
学习
warton 2002-11-19
  • 打赏
  • 举报
回复
参与 !!
kingfish 2002-11-19
  • 打赏
  • 举报
回复
to hdaq(一生何求):
你用别的程序调用时,codeguard 打开没?
leapmars 2002-11-19
  • 打赏
  • 举报
回复
水水水水水水水水水水水水水水水水水水水水水水水灌灌灌灌灌灌灌灌灌水
水水水水水水水水水水水水水水水水水灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌水
水水水水水水水水水水水水水水灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌水
水水水水水水水水水水灌灌灌灌水灌灌灌灌灌灌灌灌灌灌灌水水水水水水水
水水水水水水水灌灌灌灌灌灌灌水灌灌灌水水灌灌灌灌灌水水水水水水水水
水水灌灌灌灌灌灌灌灌灌灌灌灌水水水水水水灌灌灌灌水水水水水水水水水
灌灌灌灌灌灌灌灌灌灌灌灌灌灌水水水水水水灌灌灌灌水水水水水水水水水
灌灌灌灌灌灌灌灌灌灌灌灌水水水水水水水灌灌灌灌灌灌灌灌灌灌灌水水水
灌灌灌灌灌灌灌灌灌灌灌灌水水水水水水灌灌灌灌灌灌灌灌灌灌灌灌灌灌水
水灌灌灌灌灌灌灌灌灌灌水水水水水灌灌灌灌灌灌水水水灌灌灌灌灌灌灌水
水水水水水水水灌灌灌灌水水水水水灌灌灌灌水水水水水水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌灌水水灌灌水水水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌灌水水灌灌灌灌水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌灌水水灌灌灌灌水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌灌水水灌灌灌水水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌灌水水灌灌灌水水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌灌水灌灌灌灌水水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌灌水灌灌灌灌水水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌灌水灌灌灌灌水水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌灌水灌灌灌灌水水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌水水灌灌灌灌水水灌灌灌灌灌水水
水灌灌水水水灌灌灌灌灌水水水水灌灌灌水水灌灌灌水水水灌灌灌灌灌水水
水灌灌灌灌灌灌灌灌灌灌水水水水水灌灌水水灌灌水水水水灌灌灌灌灌水水
水水灌灌灌灌灌灌灌灌灌水水水水水水水水灌灌灌水水水水水灌灌灌灌水水
水水水水灌灌灌灌灌灌灌水水水水水水水水灌灌灌水灌灌灌灌水水水水水水
水水水水水灌灌灌灌灌灌水水水水水水水灌灌灌灌水水灌灌灌灌灌水水水水
水水水水水水水水灌灌灌水水水水水水灌灌灌灌灌水水水灌灌灌灌灌灌灌水
水水水水水水水水水水水水水水水灌灌灌灌灌灌水水水水水灌灌灌灌灌灌水
水水水水水水水水水水水水水水灌灌灌灌灌灌水水水水水水灌灌灌灌灌灌灌
水水水水水水水水水水水水水灌灌灌灌灌水水水水水水水水水灌灌灌灌灌灌
水水水水水水水水水水水水灌灌灌灌灌水水水水水水水水水水水灌灌灌灌水
水水水水水水水水水水水灌灌灌水水水水水水水水水水水水水水水灌灌灌水

我也顶!
tjzzx888 2002-11-19
  • 打赏
  • 举报
回复
复制楼上的
水水水水水水水水水水水水水水水水水水水水水水水灌灌灌灌灌灌灌灌灌水
水水水水水水水水水水水水水水水水水灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌水
水水水水水水水水水水水水水水灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌水
水水水水水水水水水水灌灌灌灌水灌灌灌灌灌灌灌灌灌灌灌水水水水水水水
水水水水水水水灌灌灌灌灌灌灌水灌灌灌水水灌灌灌灌灌水水水水水水水水
水水灌灌灌灌灌灌灌灌灌灌灌灌水水水水水水灌灌灌灌水水水水水水水水水
灌灌灌灌灌灌灌灌灌灌灌灌灌灌水水水水水水灌灌灌灌水水水水水水水水水
灌灌灌灌灌灌灌灌灌灌灌灌水水水水水水水灌灌灌灌灌灌灌灌灌灌灌水水水
灌灌灌灌灌灌灌灌灌灌灌灌水水水水水水灌灌灌灌灌灌灌灌灌灌灌灌灌灌水
水灌灌灌灌灌灌灌灌灌灌水水水水水灌灌灌灌灌灌水水水灌灌灌灌灌灌灌水
水水水水水水水灌灌灌灌水水水水水灌灌灌灌水水水水水水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌灌水水灌灌水水水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌灌水水灌灌灌灌水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌灌水水灌灌灌灌水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌灌水水灌灌灌水水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌灌水水灌灌灌水水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌灌水灌灌灌灌水水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌灌水灌灌灌灌水水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌灌水灌灌灌灌水水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌灌水灌灌灌灌水水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌水水灌灌灌灌水水灌灌灌灌灌水水
水灌灌水水水灌灌灌灌灌水水水水灌灌灌水水灌灌灌水水水灌灌灌灌灌水水
水灌灌灌灌灌灌灌灌灌灌水水水水水灌灌水水灌灌水水水水灌灌灌灌灌水水
水水灌灌灌灌灌灌灌灌灌水水水水水水水水灌灌灌水水水水水灌灌灌灌水水
水水水水灌灌灌灌灌灌灌水水水水水水水水灌灌灌水灌灌灌灌水水水水水水
水水水水水灌灌灌灌灌灌水水水水水水水灌灌灌灌水水灌灌灌灌灌水水水水
水水水水水水水水灌灌灌水水水水水水灌灌灌灌灌水水水灌灌灌灌灌灌灌水
水水水水水水水水水水水水水水水灌灌灌灌灌灌水水水水水灌灌灌灌灌灌水
水水水水水水水水水水水水水水灌灌灌灌灌灌水水水水水水灌灌灌灌灌灌灌
水水水水水水水水水水水水水灌灌灌灌灌水水水水水水水水水灌灌灌灌灌灌
水水水水水水水水水水水水灌灌灌灌灌水水水水水水水水水水水灌灌灌灌水
水水水水水水水水水水水灌灌灌水水水水水水水水水水水水水水水灌灌灌水

mrfanghansheng 2002-11-19
  • 打赏
  • 举报
回复
水水水水水水水水水水水水水水水水水水水水水水水灌灌灌灌灌灌灌灌灌水
水水水水水水水水水水水水水水水水水灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌水
水水水水水水水水水水水水水水灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌水
水水水水水水水水水水灌灌灌灌水灌灌灌灌灌灌灌灌灌灌灌水水水水水水水
水水水水水水水灌灌灌灌灌灌灌水灌灌灌水水灌灌灌灌灌水水水水水水水水
水水灌灌灌灌灌灌灌灌灌灌灌灌水水水水水水灌灌灌灌水水水水水水水水水
灌灌灌灌灌灌灌灌灌灌灌灌灌灌水水水水水水灌灌灌灌水水水水水水水水水
灌灌灌灌灌灌灌灌灌灌灌灌水水水水水水水灌灌灌灌灌灌灌灌灌灌灌水水水
灌灌灌灌灌灌灌灌灌灌灌灌水水水水水水灌灌灌灌灌灌灌灌灌灌灌灌灌灌水
水灌灌灌灌灌灌灌灌灌灌水水水水水灌灌灌灌灌灌水水水灌灌灌灌灌灌灌水
水水水水水水水灌灌灌灌水水水水水灌灌灌灌水水水水水水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌灌水水灌灌水水水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌灌水水灌灌灌灌水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌灌水水灌灌灌灌水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌灌水水灌灌灌水水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌灌水水灌灌灌水水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌灌水灌灌灌灌水水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌灌水灌灌灌灌水水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌灌水灌灌灌灌水水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌灌水灌灌灌灌水水灌灌灌灌灌水水
水水水水水水水灌灌灌灌水水水水灌灌灌水水灌灌灌灌水水灌灌灌灌灌水水
水灌灌水水水灌灌灌灌灌水水水水灌灌灌水水灌灌灌水水水灌灌灌灌灌水水
水灌灌灌灌灌灌灌灌灌灌水水水水水灌灌水水灌灌水水水水灌灌灌灌灌水水
水水灌灌灌灌灌灌灌灌灌水水水水水水水水灌灌灌水水水水水灌灌灌灌水水
水水水水灌灌灌灌灌灌灌水水水水水水水水灌灌灌水灌灌灌灌水水水水水水
水水水水水灌灌灌灌灌灌水水水水水水水灌灌灌灌水水灌灌灌灌灌水水水水
水水水水水水水水灌灌灌水水水水水水灌灌灌灌灌水水水灌灌灌灌灌灌灌水
水水水水水水水水水水水水水水水灌灌灌灌灌灌水水水水水灌灌灌灌灌灌水
水水水水水水水水水水水水水水灌灌灌灌灌灌水水水水水水灌灌灌灌灌灌灌
水水水水水水水水水水水水水灌灌灌灌灌水水水水水水水水水灌灌灌灌灌灌
水水水水水水水水水水水水灌灌灌灌灌水水水水水水水水水水水灌灌灌灌水
水水水水水水水水水水水灌灌灌水水水水水水水水水水水水水水水灌灌灌水
kingfish 2002-11-19
  • 打赏
  • 举报
回复
还有人吗?

晚上散分吧,现在网太慢
hdaq 2002-11-18
  • 打赏
  • 举报
回复
试试
extern "C" void __declspec(dllexport) __stdcall DllShowAbout(void)
{
TfmAbout *fmAbout = new TfmAbout(NULL);
fmAbout->ShowModal();
delete fmAbout;
}

我的
{
TMyForm *MyForm = new TMyForm(NULL);
MyForm->ShowModal();
delete MyForm;
}
一点问题都没有
yphy 2002-11-18
  • 打赏
  • 举报
回复
try {
fmAbout = new TfmAbout(NULL);
}
catch(Exception &e) {
Application->MessageBox( e.Message.c_str(), NULL, MB_ICONSTOP|MB_OK );
////fmAbout = NULL;;//是告诉系统该内存可以重分配
}
fmAbout->ShowModal();
delete fmAbout;
fmAbout=NULL;
最好使用try()...finally...
kingfish 2002-11-18
  • 打赏
  • 举报
回复
up!
kingfish 2002-11-18
  • 打赏
  • 举报
回复
extern "C" void __declspec(dllexport) __stdcall DllShowAbout(void)
{
fmAbout = new TfmAbout(NULL);
fmAbout->ShowModal();
delete fmAbout;
}

这样仍然有

其实很简单,大家可以试试看有无此问题
weibz0525 2002-11-18
  • 打赏
  • 举报
回复
不懂,参合
JamesJiang 2002-11-18
  • 打赏
  • 举报
回复
我仔细看了一下你的代码,估计CodeGuard是使用条件分支覆盖的方法来判断是否有内存泄露的,你把if(fmAbout)去掉的话可能就不会有那个警告了。
kingfish 2002-11-18
  • 打赏
  • 举报
回复
extern "C" void __declspec(dllexport) __stdcall DllShowAbout(void)
{
try {
fmAbout = new TfmAbout(NULL);
}
catch(Exception &e) {
Application->MessageBox( e.Message.c_str(), NULL, MB_ICONSTOP|MB_OK );
if(fmAbout) delete fmAbout;
}
fmAbout->ShowModal();
delete fmAbout;

}

虽然不影响,我还是试了一下,问题依然
JamesJiang 2002-11-18
  • 打赏
  • 举报
回复
是误报,你把fmAbout=NULL;注释掉应该就没有警告提示了,这一行在你这里其实没什么作用。
hlmsoft 2002-11-18
  • 打赏
  • 举报
回复
我没试,但我觉得是fmAbout在catch中未被删除,得缘故,虽然本意并非如此,如果在catch字句中,先测试看是否内存已分配,如分配则还要delete,否则,肯定内存泄漏
kingfish 2002-11-18
  • 打赏
  • 举报
回复
codeGuard不会这么差吧?
JamesJiang 2002-11-18
  • 打赏
  • 举报
回复
应该是CodeGuard的误报,那玩意很不可靠的。
加载更多回复(2)

13,873

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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