pango 发表于 2008-1-8 17:31:36

我编译的ACE调式版本有内存泄漏

为5.6版本,编译的调试版DLL在一MFC对话框程序下使用,退出程序时发现有内存泄漏,而Release版本则没有,这是为什么?

peakzhang 发表于 2008-1-8 18:06:19

内存泄露不是一个一两句就能说清的问题。
ACE代码库经过多年的发展和开发,具备工业级质量,还是先自己仔细检查一下你的代码,用工具查看是否有内存泄露。
如果代码量不大,贴上来大家一起看看。

pango 发表于 2008-1-9 10:00:22

版主不要误会,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;
}

pango 发表于 2008-1-9 10:05:57

问题解决了,只要在程序文件用#pragma comment(lib,"ACEd.lib")连接ACE库,而不是在工程设置中就可以;我想起公司以前开发的一3D引擎也存在同样的问题(必须用pragma comment命令连接LIB文件,不然内存泄露),这是什么原因啊?pragma comment到底有什么魔力啊?

z1y1m1 发表于 2008-3-31 21:50:17

原帖由 pango 于 2008-1-9 10:05 发表 http://www.acejoy.com/bbs/images/common/back.gif
pragma comment到底有什么魔力啊?
呵呵,我想这个问题应该问微软啊
页: [1]
查看完整版本: 我编译的ACE调式版本有内存泄漏