![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Код:
function test:Tstrings
begin
result:=TStringsList.Create;
result.add('over 1gb text'); // Ж)
end;
procedure blabla;
var
t:TStrings;
begin
t:= test;
memo1.lines.addStrings(t);
t.free;
end;t - как видно освобождаем из памяти, а вот функцию test нет. Или же все нормально? |
|
#2
|
||||
|
||||
|
Цитата:
|
| Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Евгений79 (04.10.2012)
| ||
|
#3
|
|||
|
|||
|
Значит командой t.free мы освобождаем и t и функцию?
Ну если нет исключений ![]() |
|
#4
|
||||
|
||||
|
Цитата:
|
| Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Евгений79 (04.10.2012)
| ||
|
#5
|
|||
|
|||
|
Разжуйте пожалуйста механику процесса, чтобы в голове был порядок.
Если это, конечно, возможно сделать в нескольких предложениях. |
|
#6
|
||||
|
||||
|
все Ok будет
|
|
#7
|
||||
|
||||
|
Цитата:
функция Test создаёт лист и присваивает адрес листа указателю Result, по выходу из этой функции адрес из Result копируется в другой указатель T дальше ты мутишь через указатель с этим списком всё что хочешь и освобождаешь его. утечка возникнет если ты не сделав t.Free сделаешь ещё раз t:= test тогда у тебя в памяти будет 2 листа а указатель будет только на один хорошо про указатели утечки и освобождения памяти вот тут http://www.transl-gunsmoker.ru/2009/09/blog-post.html Последний раз редактировалось Lost_Fish, 04.10.2012 в 10:15. |
| Этот пользователь сказал Спасибо Lost_Fish за это полезное сообщение: | ||
Евгений79 (04.10.2012)
| ||