|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
26.07.2010, 09:08 | #11 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
, возьму на вооружение .
Цитата:
Потому что, память занятая под объекты, после выхода из функции будет помечена как свободная область и есть вероятность, что до использования данного объекта она будет занята кем-то еще. Проблема трудноотлавливаемая плюс в данном случае была рекурсия. Более того, TS Вы разрушите, а кто разрушит Result? Однозначно лучше процедура с изменяемым входящим параметром. Объект создан до процедуры и соответственно никаких заморочек с его разрушением.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
|
15.08.2010, 00:22 | #12 |
Форумчанин
Регистрация: 10.02.2009
Сообщений: 181
|
Всем спасибо за ответы.
DomiNick, Не могли бы объяснить как пользоваться вашей процедурой? Вот мне надо добавить список найденных файлов в листбокс. При использовании функции я делал так: ListBox1.Items.AddStrings(GetFiles( 'C:\example')); Последний раз редактировалось Anfall; 15.08.2010 в 00:28. |
15.08.2010, 01:49 | #13 | ||
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Цитата:
Цитата:
Да, есть. Но не там, куда вас тыкали две страницы. Утечка не в этой функции, а в этом коде: Код:
Код:
И в догонку.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
Последний раз редактировалось Stilet; 16.08.2010 в 09:02. |
||
15.08.2010, 10:31 | #14 | |||
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Цитата:
Цитата:
Цитата:
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог Последний раз редактировалось mutabor; 15.08.2010 в 10:37. |
|||
15.08.2010, 14:21 | #15 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Добавлю: по этой причине надо всё же сказать, что это не самый типичный подход. Да, он 100% корректен. Проблема в том, что вы разделяете ответственность за жизнь объекта между вызывающим и вызываемым. Это не самая типичная и прозрачная логика.
Обычно, есть хорошее правило (хорошего тона): любую вещь, возвращаемую функцией, можно использовать непосредственно. Иными словами, функция не должна возвращать нечто, требующее дополнительной обработки - в том числе освобождения. Соблюдение этого простого правила позволяет вам писать цепочки вложенных вызовов вот так: Код:
Но в большинстве случаем лучше сработает редизайн API, например: Код:
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
Последний раз редактировалось Stilet; 16.08.2010 в 08:54. |
15.08.2010, 15:01 | #16 | |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Цитата:
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
|
15.08.2010, 16:45 | #17 | ||
Студент, не
Старожил
Регистрация: 29.01.2009
Сообщений: 2,067
|
До меня кстати дошло... "Items: TStrings" - это ж по сути указатель будет...
Цитата:
Код:
Цитата:
Про FindClose я потом уже таки-вспомнил, вот только не могу найти на каждый ли вызов "FindFirst" нужно "FindClose"... Хотя всё равно придётся... Anfall, перед последним "end;" в функции добавьте "FindClose(Rec);"...
I am the First of Cyber Evolution...
I am the First to Program your Future... |
||
15.08.2010, 17:19 | #18 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
это по сути и есть указатель.
в Делфи объекты указательные всегда(всегда указатель на объект, а объект в куче) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
15.08.2010, 18:30 | #19 | |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Цитата:
Иногда еще объясняют на таком примере: представьте что у вас на ниточках подвешена коробка, коробка - это объект, ниточки - указатели. Ниточек может быть много, а коробка одна, и вот по одной начинаете перерезать их. Объект будет висеть пока будет хоть одна ниточка, а вот когда обрежется последняя, то тут зависит от языка, в Java например сборщик мусора объект подберет, а в Дельфи перед обрезанием последней ниточки нужно сперва память освободить из под объекта.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
|
16.08.2010, 20:04 | #20 |
Форумчанин
Регистрация: 10.02.2009
Сообщений: 181
|
GunSmoker,
Спасибо. Попробую код: Код:
DomiNick, вот так верно? Код:
Последний раз редактировалось Anfall; 16.08.2010 в 20:21. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Indy в потоке - утечка памяти | PUH | Фриланс | 5 | 28.12.2009 14:06 |
Indy в потоке - утечка памяти | PUH | Помощь студентам | 0 | 25.12.2009 12:27 |
Утечка памяти при работе с GDI+ | Ivan_32 | Общие вопросы C/C++ | 2 | 29.11.2009 00:12 |
утечка памяти в С++ | vengo | Общие вопросы C/C++ | 9 | 10.06.2008 21:24 |
DrawState - утечка памяти? | unnamed | Win Api | 2 | 11.04.2007 18:36 |