![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]() ![]() ![]() Цитата:
Потому что, память занятая под объекты, после выхода из функции будет помечена как свободная область и есть вероятность, что до использования данного объекта она будет занята кем-то еще. Проблема трудноотлавливаемая плюс в данном случае была рекурсия. Более того, TS Вы разрушите, а кто разрушит Result? Однозначно лучше процедура с изменяемым входящим параметром. Объект создан до процедуры и соответственно никаких заморочек с его разрушением.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() |
|
![]() |
![]() |
![]() |
#12 |
Форумчанин
Регистрация: 10.02.2009
Сообщений: 181
|
![]()
Всем спасибо за ответы.
DomiNick, Не могли бы объяснить как пользоваться вашей процедурой? Вот мне надо добавить список найденных файлов в листбокс. При использовании функции я делал так: ListBox1.Items.AddStrings(GetFiles( 'C:\example')); Последний раз редактировалось Anfall; 15.08.2010 в 00:28. |
![]() |
![]() |
![]() |
#13 | ||
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]() Цитата:
Цитата:
Да, есть. Но не там, куда вас тыкали две страницы. Утечка не в этой функции, а в этом коде: Код:
Код:
И в догонку.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
Последний раз редактировалось Stilet; 16.08.2010 в 09:02. |
||
![]() |
![]() |
![]() |
#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 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
Добавлю: по этой причине надо всё же сказать, что это не самый типичный подход. Да, он 100% корректен. Проблема в том, что вы разделяете ответственность за жизнь объекта между вызывающим и вызываемым. Это не самая типичная и прозрачная логика.
Обычно, есть хорошее правило (хорошего тона): любую вещь, возвращаемую функцией, можно использовать непосредственно. Иными словами, функция не должна возвращать нечто, требующее дополнительной обработки - в том числе освобождения. Соблюдение этого простого правила позволяет вам писать цепочки вложенных вызовов вот так: Код:
Но в большинстве случаем лучше сработает редизайн API, например: Код:
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
Последний раз редактировалось Stilet; 16.08.2010 в 08:54. |
![]() |
![]() |
![]() |
#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)
Проверь себя! Онлайн тестирование | Мой блог |
|
![]() |
![]() |
![]() |
#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... |
||
![]() |
![]() |
![]() |
#18 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
это по сути и есть указатель.
в Делфи объекты указательные всегда(всегда указатель на объект, а объект в куче) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#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)
Проверь себя! Онлайн тестирование | Мой блог |
|
![]() |
![]() |
![]() |
#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 |