Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Утечка памяти / 3 сообщений из 3, страница 1 из 1
27.10.2003, 13:14
    #32306027
KurS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Утечка памяти
Есть программа, в которой при нажатии на кнопку запускается поток, проверяющий наличие определенных файлов в определенных папках. Если файл найден, то в этом потоке вызывается функция (текст функции неже), отправляющая файл по почте, затем при возврате из функции этот файл удаляется. При сканировании каталогов память, отведенная программе не изменяется, когда же происходит отправка, то она увеличивается и не освобождается.

текст функции

void __fastcall ScanFolder::SendEmail()
{
MapiRecipDesc->ulReserved = 0;
MapiRecipDesc->ulRecipClass = MAPI_TO;
MapiRecipDesc->lpszName = RecipName.c_str();
MapiRecipDesc->lpszAddress = RecipAddress.c_str();
MapiRecipDesc->ulEIDSize = 0;
MapiRecipDesc->lpEntryID = NULL;

MapiFileDesc->ulReserved = 0;
MapiFileDesc->flFlags = 0;
MapiFileDesc->nPosition = 0;
MapiFileDesc->lpszPathName = CurFile2.c_str();
MapiFileDesc->lpszFileName = NULL;
MapiFileDesc->lpFileType = NULL;

MapiMessage->ulReserved = 0;
MapiMessage->lpszSubject = Subject.c_str();
MapiMessage->lpszNoteText = NoteText.c_str();
MapiMessage->lpszMessageType = NULL;
MapiMessage->lpszDateReceived = NULL;
MapiMessage->lpszConversationID = NULL;
MapiMessage->flFlags = 0;
MapiMessage->lpOriginator = NULL;
MapiMessage->nRecipCount = 1;
MapiMessage->lpRecips = MapiRecipDesc;
MapiMessage->nFileCount = 1;
MapiMessage->lpFiles = MapiFileDesc;
MError = MapiSendMail(0, reinterpret_cast<unsigned int>(Application->Handle),
*MapiMessage, MAPI_NEW_SESSION, 0);
if (MError)
FlagDelFile = 1;

}

в определении класса потока
TMapiMessage* MapiMessage;
TMapiRecipDesc* MapiRecipDesc;
TMapiFileDesc* MapiFileDesc;
Cardinal MError;

в конструкторе класса
MapiMessage = new TMapiMessage;
MapiRecipDesc = new TMapiRecipDesc;
MapiFileDesc = new TMapiFileDesc;

в функции OnTerminate
delete MapiMessage;
delete MapiRecipDesc;
delete MapiFileDesc;

опыта у меня, конечно, маловато, но кажется, что при вызове функции MapiSendMail() происходит увеличение памяти, отведенной приложению, а затем эта память не освобождается. Как это победить я не знаю. Может подскажете (хотя бы - где искать).
С уважением Сергей К.
...
Рейтинг: 0 / 0
27.10.2003, 13:24
    #32306040
vdimas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Утечка памяти
она увеличивается каждый раз при отправке или только первый раз? (имеется ввиду не выходя из апликухи)?

Если только один раз - все ok.
...
Рейтинг: 0 / 0
27.10.2003, 13:48
    #32306078
KurS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Утечка памяти
Поток, который сканирует папки, висит постоянно, и при появлении файла в папке вызывается функция SendEmail(), определенная в этом потоке. Т.е. при каждой отправке письма происходит увеличение памяти.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Утечка памяти / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]