找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4123|回复: 4

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

[复制链接]
发表于 2008-1-8 17:31:36 | 显示全部楼层 |阅读模式
为5.6版本,编译的调试版DLL在一MFC对话框程序下使用,退出程序时发现有内存泄漏,而Release版本则没有,这是为什么?
发表于 2008-1-8 18:06:19 | 显示全部楼层
内存泄露不是一个一两句就能说清的问题。
ACE代码库经过多年的发展和开发,具备工业级质量,还是先自己仔细检查一下你的代码,用工具查看是否有内存泄露。
如果代码量不大,贴上来大家一起看看。
 楼主| 发表于 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;
}
 楼主| 发表于 2008-1-9 10:05:57 | 显示全部楼层
问题解决了,只要在程序文件用#pragma comment(lib,"ACEd.lib")连接ACE库,而不是在工程设置中就可以;我想起公司以前开发的一3D引擎也存在同样的问题(必须用pragma comment命令连接LIB文件,不然内存泄露),这是什么原因啊?pragma comment到底有什么魔力啊?
发表于 2008-3-31 21:50:17 | 显示全部楼层
原帖由 pango 于 2008-1-9 10:05 发表
pragma comment到底有什么魔力啊?
呵呵,我想这个问题应该问微软啊
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-22 13:30 , Processed in 0.025123 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表