I hope i'm clear to post the problem. I'm using Visual Studio 2003 SP1. The main application is a simple Win32 application that link dinamically a MFC dll. In some case when a try to execute FreeLibrary of the dll previusly loaded by LoadLibrary i get a memory leaks. For example in this code :
a=new int [100]; hmod=LoadLibrary(FILEDLL); FreeLibrary(hmod); delete [] a;
when i execute the FreeLibrary i get this memory dump:
"TestLoadFree.exe": Load"C:\.......\TestMemLeaks.dll", .... "TestLoadFree.exe": Load"C:\WINDOWS\system32\mfc71d.dll", .... "TestLoadFree.exe": Load"C:\WINDOWS\system32\MFC71ITA.DLL", ....
Detected memory leaks! Dumping objects -> {60} normal block at 0x00852C88, 400 bytes long. Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD Object dump complete. "TestLoadFree.exe": Unload"C:\.......\TestMemLeaks.dll" "TestLoadFree.exe": Unload"C:\WINDOWS\system32\mfc71d.dll" "TestLoadFree.exe": Unload"C:\WINDOWS\system32\MFC71ITA.DLL
It seems a Fake memory leaks .. but i'm not sure. ! So i added the ExitInstance handler of MFC dll to verify when the memory leaks is fired:
int CTestMemLeaksApp::ExitInstance() { TRACE(_T("Start ExitInstance() for regular DLL: TESTDLL\n")); int retvalue=CWinApp::ExitInstance(); TRACE(_T("End ExitInstance() for regular DLL: TESTDLL\n")); return retvalue; }
and i get this memory dump:
"TestLoadFree.exe": Load"C:\.......\TestMemLeaks.dll", .... "TestLoadFree.exe": Load"C:\WINDOWS\system32\mfc71d.dll", .... "TestLoadFree.exe": Load"C:\WINDOWS\system32\MFC71ITA.DLL", ....
Start ExitInstance() for regular DLL: TESTDLL End ExitInstance() for regular DLL: TESTDLL
Detected memory leaks! Dumping objects -> {60} normal block at 0x00852C88, 400 bytes long. Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD Object dump complete. "TestLoadFree.exe": Unload"C:\.......\TestMemLeaks.dll" "TestLoadFree.exe": Unload"C:\WINDOWS\system32\mfc71d.dll" "TestLoadFree.exe": Unload"C:\WINDOWS\system32\MFC71ITA.DLL"
the debbugger write the memory dump when the FreeLibrary is called ... It is clear that the memory leaks is related to a pointer allocation. But it is not clear because the memory leak is present! I suspect to some not right settings of two project... But the main application is a Win32 application with Code generation = Debug Multithreaded DLL, while the dll mfc use the same code generation setting and the MFC is used in shared mode (Use MFC in Shared DLL). I think it is all right .. but the memory leaks is again there! 
If it is useful i can post the entire two project (both are near to the code generate by wizard )
Thank in advance!
Visual C++4
|