![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 04.01.2011
Сообщений: 267
|
![]()
Добрый день. Есть код функции:
Код:
Вызов функции: FullStr3:=DelParagraph(FullStr2,SWo rds,L); в общем функция получает две строки1 и 2 и число, сравнивает слова в строках и если число совпадений превышает порог переносит строку1 на выход. Проблема состоит в том что при завершении программы ReportMemoryLeaksOnShutdown выдает сообщение о небольшой утечке памяти в TStringList если заблокировать вызов функции, то утечка пропадает ВОпросы: 1. как вообще можеть быть утечка при наличии try-finally-end вроде бы гарантирующее уничтожение объектов 2. как вообще определить где конкретно это происходит 3. может быть код кривой? тогда где? |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
T1:=TStringList.Create;
T2:=TStringList.Create; ... if Length(Str1) = 0 then Exit; Count:=0; try ...
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]()
Кстати, хороший пример, показывающий вредность использования exit.
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 04.01.2011
Сообщений: 267
|
![]()
так что екзит? тут много рассказывали что в try-finally-end все одно после екзита буде выполнено.
так не слишком криво: Код:
так так, а что взамен? а то этот екзит постоянно применять приходится Последний раз редактировалось Stilet; 17.03.2013 в 17:56. |
![]() |
![]() |
![]() |
#5 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]() Цитата:
Код:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 17.03.2013 в 17:42. |
|
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 04.01.2011
Сообщений: 267
|
![]()
так еще лучше, спасибо за пример
|
![]() |
![]() |
![]() |
#7 | |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]()
exit - это нарушающий структуру выход из подпрограммы.
Используйте вместо него полноценную конструкцию if then else. Это немного дольше писать, зато намного быстрее отлаживать. Еще лучше поставить Цитата:
Последний раз редактировалось Stilet; 17.03.2013 в 18:38. |
|
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 04.01.2011
Сообщений: 267
|
![]()
типа чтобы после else оказался последний оператор и end?
а можно усеченный пример(только if Length(Str1) = 0 then Exit) выше приведенного кода? |
![]() |
![]() |
![]() |
#9 | |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]() Цитата:
Я бы написал так: Код:
|
|
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 04.01.2011
Сообщений: 267
|
![]()
попробуем поменять логику в используемых функциях, посмотрим что будет. спасибо
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
утечка памяти | Кудаив | Помощь студентам | 1 | 30.04.2012 18:18 |
Утечка памяти | forivanb | Общие вопросы Delphi | 4 | 11.04.2012 15:28 |
Утечка памяти | Juffin | Общие вопросы Delphi | 3 | 02.11.2010 12:11 |
Утечка памяти | ZvEr_HaCkEr | Свободное общение | 13 | 24.09.2010 19:30 |
утечка памяти в С++ | vengo | Общие вопросы C/C++ | 9 | 10.06.2008 21:24 |