我编译的ACE调式版本有内存泄漏
为5.6版本,编译的调试版DLL在一MFC对话框程序下使用,退出程序时发现有内存泄漏,而Release版本则没有,这是为什么? 内存泄露不是一个一两句就能说清的问题。ACE代码库经过多年的发展和开发,具备工业级质量,还是先自己仔细检查一下你的代码,用工具查看是否有内存泄露。
如果代码量不大,贴上来大家一起看看。 版主不要误会,ACE稳定性我还是信任的,只是我怀疑我自己编译的ACE DLL是否存在问题,我是从ACE的官方网站上下载了5.6版本的代码包,然后用VC8+SP1编译ACE_wrappers_vc8.sln项目文件,得到调试版和正式版的DLL,然后我发现调试版DLL在MFC程序下执行了ACE::init()和ACE::fini()后,程序退出时就有内存泄露报告(用DebugView程序看到的),而调试版DLL在其他非MFC程序下(如Console,WIN32)则没有此情况发生,我现在把我程序的ACE和对话框初始部分贴出来,你帮我看看(没办法贴全部,因为MFC程序都很大)
BOOL CTest1App::InitInstance()
{
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);
CWinApp::InitInstance();
AfxEnableControlContainer();
ACE::init();
{
CTest1Dlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
}
ACE::fini();
return FALSE;
} 问题解决了,只要在程序文件用#pragma comment(lib,"ACEd.lib")连接ACE库,而不是在工程设置中就可以;我想起公司以前开发的一3D引擎也存在同样的问题(必须用pragma comment命令连接LIB文件,不然内存泄露),这是什么原因啊?pragma comment到底有什么魔力啊? 原帖由 pango 于 2008-1-9 10:05 发表 http://www.acejoy.com/bbs/images/common/back.gif
pragma comment到底有什么魔力啊?
呵呵,我想这个问题应该问微软啊
页:
[1]