Здравствуйте, Alex_Bukreev, Вы писали:
A_B>Здравствуйте, LMars, Вы писали:
LM>>Случайно это не из-за того, что код с ошибкой? Надо:
LM>>LM>> HMODULE hModule = AfxLoadLibrary( _T("MyDLL.dll") );
LM>> int* p1 = new int[ 100 ];
LM>> char* p2 = new char[ 321 ];
LM>> AfxFreeLibrary( hModule );
LM>> delete [] p1;
LM>> delete [] p2;
LM>>
A_B>Да, я потом вспомнил что в таких случаях в delete надо ставить [], но они не помогли
A_B>Тем более видите, там утечки памяти показываются не только в тех местах, где я её явно выделяю. Кстати CDynLinkLibrary, это мне ясно, действительно такой объект создаётся в DllMain MFC extension DLL, не понятно только почему он два раза в memory leaks упоминается, ведь адрес один-то.
Глюк явно в DLL, которую вы загружаете, а точнее в функции DllMain, которая вызывается при загрузки и выгрузке динамической библиотеки. Наверняка при загрузки библиотеки создается элемент класса, а при выгрузке он не уничтожается, что ведет к утечки памяти в программе
Вот пример, как должна быть написана DllMain функция в библиотеки
Array2D *Temp;
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
// Выполняется при загрузки библиотеки
Temp = new Array2D;
break;
}
case DLL_PROCESS_DETACH:
{
// Выпольняется при выгрузке библиотеки
delete Temp;
break;
}
}
return TRUE;
}