用MFC的向导创建一MFC扩展DLL,但在程序中调用时,Debug调试总是跟踪到内存泄漏,
提示在DllMain中
。。.
。。..
if (dwReason == DLL_PROCESS_ATTACH)
{
.
new CDynLinkLibrary(myDLL);//提示此处Memory leak
}
else if (dwReason == DLL_PROCESS_DETACH)
{
。
AfxTermExtensionModule(myDLL);
}
但这些代码全是向导生成的,我其他甚至什么都没做,调试提示new CDynLinkLibrary(myDLL);内存泄漏,但在程序退出时,AfxTermExtensionModule(myDLL)被调用,应该已经对其析构了呀,为什么BoundsCheck总提示内存泄漏,难道这是MFC的BUG??
经过我的进一步测试,一个问题更让我困惑,我在MFC扩展DLL内自定义一简单的扩展类,
//在mydll.h内
class AFX_EXT_CLASS ExtClass :public CObject
{
public:
ExtClass();
virtual ~ExtClass();public:
int* m_pValue;};//在mydll.cpp内
ExtClass::ExtClass()
{
m_pValue = new int[1];
}ExtClass::~ExtClass()
{
delete [] m_pValue;
}
ExtClass oneObject;//在动态库mydll内我定义了一模块内全局对象实体在应用程序中调用该mydll,debug调试时提示ExtClass构造函数内的m_pValue = new int[1]内存泄漏, 但跟踪代码运行,程序退出时ExtClass类的析构函数~ExtClass已经被调用,应该已经析构了呀;
如果取消掉那句在mydll.cpp内的动态连接库内定义的全局对象实体,而是改在我的应用程序的TestDll.cpp中定义该对象,就不会出现内存泄漏。
为什么在DLL内和在DLL外定义对象,一个会出现泄漏,一个不会呢?
提示在DllMain中
。。.
。。..
if (dwReason == DLL_PROCESS_ATTACH)
{
.
new CDynLinkLibrary(myDLL);//提示此处Memory leak
}
else if (dwReason == DLL_PROCESS_DETACH)
{
。
AfxTermExtensionModule(myDLL);
}
但这些代码全是向导生成的,我其他甚至什么都没做,调试提示new CDynLinkLibrary(myDLL);内存泄漏,但在程序退出时,AfxTermExtensionModule(myDLL)被调用,应该已经对其析构了呀,为什么BoundsCheck总提示内存泄漏,难道这是MFC的BUG??
经过我的进一步测试,一个问题更让我困惑,我在MFC扩展DLL内自定义一简单的扩展类,
//在mydll.h内
class AFX_EXT_CLASS ExtClass :public CObject
{
public:
ExtClass();
virtual ~ExtClass();public:
int* m_pValue;};//在mydll.cpp内
ExtClass::ExtClass()
{
m_pValue = new int[1];
}ExtClass::~ExtClass()
{
delete [] m_pValue;
}
ExtClass oneObject;//在动态库mydll内我定义了一模块内全局对象实体在应用程序中调用该mydll,debug调试时提示ExtClass构造函数内的m_pValue = new int[1]内存泄漏, 但跟踪代码运行,程序退出时ExtClass类的析构函数~ExtClass已经被调用,应该已经析构了呀;
如果取消掉那句在mydll.cpp内的动态连接库内定义的全局对象实体,而是改在我的应用程序的TestDll.cpp中定义该对象,就不会出现内存泄漏。
为什么在DLL内和在DLL外定义对象,一个会出现泄漏,一个不会呢?
解决方案 »
- c2664 cannot convert parameter 1 from 'std::fstream' to 'std::fstream'
- 请教:关于FTP下载进度的问题
- IMPLEMENT_CMD_CONTROL(CMDControlButton, CMDControl)
- List Control中如何让里面的文本可以编辑
- 简单问题三
- 有没有可以设背景的ListView?
- CSocket编的POP3问题,高手看看错在那里?(附有简短源代码)
- 请Sagansonme领分
- LeaveCriticalSection的BUG利用
- 请问:如何给LISTCTRL加上复选框?
- 能否在NT服务程序中进行文件的读写?如何实现?
- 怎样才能把自已的程序注册成Windows2000的服务
(COM dll 除外)
应该用HeapAlloc/VirtualAlloc等API函数分配内存就不会有问题了。