_AFX_DEBUG_STATE析构函数未调用

时间:2016-05-20 10:46:21

标签: c++ visual-c++ dll mfc

我有一个MFC应用程序,它包含一个主应用程序和许多MFC扩展DLL。它还具有包含所有资源的扩展资源DLL。我注意到应用程序没有报告内存泄漏,因为MFC应用程序通常会在我发生内存泄漏时执行此操作。我遍历了所有内容,发现MFC内存泄漏报告机制是通过类_AFX_DEBUG_STATE。与基于标准向导的MFX应用程序相比,我在dumpinit.cpp中实例化了一个_AFX_DEBUG_STATE对象:

static BOOL _afxDiagnosticInit = AfxDiagnosticInit();

基本上,内存泄漏报告机制的初始化在我的应用程序和向导生成的MFC应用程序中是相同的。

有一个名为afxDebugState的静态对象,定义为:

extern CProcessLocal<_AFX_DEBUG_STATE> afxDebugState;

创建时的调用堆栈是:

mfc120ud.dll!_AFX_DEBUG_STATE::_AFX_DEBUG_STATE() Line 109  C++
mfc120ud.dll!CProcessLocal<_AFX_DEBUG_STATE>::CreateObject() Line 229   C++
mfc120ud.dll!CProcessLocalObject::GetData(CNoTrackObject * (void) * pfnCreateObject) Line 462   C++
mfc120ud.dll!CProcessLocal<_AFX_DEBUG_STATE>::GetData() Line 215    C++
mfc120ud.dll!AfxDiagnosticInit() Line 135   C++
mfc120ud.dll!`dynamic initializer for '_afxDiagnosticInit''() Line 20   C++
msvcr120d.dll!_initterm(void (void) * * pfbegin, void (void) * * pfend) Line 955    C
mfc120ud.dll!_CRT_INIT(void * hDllHandle, unsigned long dwReason, void * lpreserved) Line 295   C
mfc120ud.dll!__DllMainCRTStartup(void * hDllHandle, unsigned long dwReason, void * lpreserved) Line 502 C
mfc120ud.dll!_DllMainCRTStartup(void * hDllHandle, unsigned long dwReason, void * lpreserved) Line 472  C

然而,对象的析构函数在向导应用程序中调用,但从不在我的应用程序中,因此我没有内存泄漏转储机制。

有人可以解释那个吗?

由于

0 个答案:

没有答案