powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Утечка памяти
3 сообщений из 3, страница 1 из 1
Утечка памяти
    #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
Утечка памяти
    #32306040
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
она увеличивается каждый раз при отправке или только первый раз? (имеется ввиду не выходя из апликухи)?

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


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