Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2016, 16:40   #1
garuna
Форумчанин
 
Аватар для garuna
 
Регистрация: 13.04.2013
Сообщений: 180
Лампочка Помогите найти утечку

Добрый вечер! Имеется исходник небольшой программы, которая через ReadDirectoryChangesW определяет изменения файлов в заданной папке. Наличие утечки памяти определил через ReportMemoryLeaksOnShutdown, но понять в каком именно месте она происходит и как ее устранить не могу


Буду благодарен если у какого-нибудь здешнего профи найдется минутка глянуть код, исходник прилагаю:
https://yadi.sk/d/4Nsmrj1omoisX
garuna вне форума Ответить с цитированием
Старый 11.01.2016, 18:23   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Учечка () может быть тут:
Код:
procedure TFolderMonWorker.Execute;
const
  cBufSize = 32 * 1024;  // 32k
var
  B: Pointer;
  vCount: DWord;
  vOffset: DWord;
  vFileInfo: PFILE_NOTIFY_INFORMATION;
begin
  GetMem(B, cBufSize);
  try
    while not Terminated do
    begin
      if Owner=nil then
        Exit;
Т.е. память занятая под B не освобождается, если Owner=nil
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.01.2016, 18:29   #3
garuna
Форумчанин
 
Аватар для garuna
 
Регистрация: 13.04.2013
Сообщений: 180
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Учечка () может быть тут:
Код:
procedure TFolderMonWorker.Execute;
const
  cBufSize = 32 * 1024;  // 32k
var
  B: Pointer;
  vCount: DWord;
  vOffset: DWord;
  vFileInfo: PFILE_NOTIFY_INFORMATION;
begin
  GetMem(B, cBufSize);
  try
    while not Terminated do
    begin
      if Owner=nil then
        Exit;
Т.е. память занятая под B не освобождается, если Owner=nil
Неа, явно не здесь. Exit находиться в блоке try finally, поэтому код в finally в любом случае выполняется.
garuna вне форума Ответить с цитированием
Старый 11.01.2016, 18:37   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
поэтому код в finally в любом случае выполняется.
М.м.м... Не знал об этом. Моя ошибка.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.01.2016, 05:56   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

А где TFolderMon.Create?
Короче в одном классе только конструктор, а в другом только деструктор. Не знаю, я бы на месте Делфи еще бы не такие финты выкидывал...
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 14.01.2016 в 06:01.
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти седловые точки в матрице(помогите найти ошибку) - pascal tdsotm Помощь студентам 0 20.11.2014 18:57
Помогите найти Alex2009 Свободное общение 4 27.06.2009 19:47
Помогите найти Sanek_ntsk Свободное общение 0 15.11.2007 21:12