![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как правельно освободить память в TStringList
webSQLNeederr © (2008-03-15 16:56:00)Мне нужно в цикле работать с TStringList
Как правельно освобождать память? Пример
for i:=0 to 10 do
begin
str:=TStringList.create;
blablabla
str.Free;
end;
ЦУП (2008-03-16 17:14:00) [1]
> MetalFan © (16.03.08 14:33) [22]
>
> > {RASkov} © (16.03.08 13:04) [21]
>
> в общем в твоем примере частный случай использования t..
> f. например для однозначного выполнения кода, который освободит
> экземпляр созданного ранее класса.
А у тебя есть другой инструмент для гарантированного освобождения динамически выделенных ресурсов?
{RASkov} (2008-03-16 14:37:00) [2]> [22] MetalFan © (16.03.08 14:33)
Ну а теперь внимательно читаем [18] ;)
MetalFan (2008-03-16 14:33:00) [3]
> {RASkov} © (16.03.08 13:04) [21]
в общем в твоем примере частный случай использования t..f. например для однозначного выполнения кода, который освободит экземпляр созданного ранее класса.
{RASkov} (2008-03-16 13:04:00) [4]> и вот так
> for N:=0 to 1000 do begin
> O.Create;
> X:=5/0; //намерянная ошибка
> O.Free;
> end;
т.е. цикл здесь "собсно" и не при чем... но при выполнении этого кода "вручную"(например по нажатию TButton) все будет плохо :)
{RASkov} (2008-03-16 13:02:00) [5]> [19] MetalFan © (16.03.08 12:44)
> то какая помощь от t..f ?
О боже...
Вот смотри:
for N:=0 to 1000 do begin
O.Create;
try
X:=5/0; //намерянная ошибка
finally
O.Free;
end;
end;
и вот так
for N:=0 to 1000 do begin
O.Create;
X:=5/0; //намерянная ошибка
O.Free;
end;
и где память потекёт???
> [17] {RASkov} © (16.03.08 01:01)
Меня уже "банить" начали в этой ветке :) И что я там такого сказал-то некультурного :( Вроде бы только примеры автору вопроса показывал :)
Как и здесь...)
MetalFan (2008-03-16 12:44:00) [6]
> незаменимый инструмент для устранения утечек памяти
а при чем тут утечки и try..finally? если вдруг что-то грохнется между try..finally, тогда он и поможет. а если где-то память кушается и не освобождается, то какая помощь от t..f ?
Германн (2008-03-16 01:13:00) [7]
> Да при чем тут трай файнали ??? Это всего лишь инструмент
> обработки ошибок !!!
Да. Это инструмент обработки ошибок. Но это как раз самый незаменимый инструмент для устранения утечек памяти при многократном создании и уничтожении объектов в рантайме.
{RASkov} (2008-03-16 01:01:00) [8]Удалено модератором
Примечание: Выражения выбираем, не в пивной
Johnmen (2008-03-16 00:47:00) [9]Не хватает памяти? Всё занято серым веществом?
Да ладно заливать-то нашим ребятам...
Игорь Шевченко (2008-03-16 00:33:00) [10]
> Вылетело сообщение, что не хватает памяти. Собственно вот
> я и думаю как экономить память ... Что посоветуете?
А может у тебя действительно не хватает памяти ?
Kolan (2008-03-16 00:21:00) [11]> То вылетает ошибка виолейшн аксес
> Вылетело сообщение, что не хватает памяти.
Ты определись наверно
Так на какой строке то вылетело ?
antonn (2008-03-16 00:19:00) [12]
>
> str.Free если кинуть внутрь цикла и вначале каждой итерации
> str:=TStringList.create;
>
> То вылетает ошибка виолейшн аксес ...
еще бы... free убивает твой стринглсит.
какой размер у файла?
webSQLNeederr (2008-03-16 00:15:00) [13]
> ты принципиально ответы не читаешь, данный код источник
> неприятностей.
Да при чем тут трай файнали ??? Это всего лишь инструмент обработки ошибок !!!
А я говорю об элементарном варианте - как в том урывке, что я привел сэкономить память?
str.Free если кинуть внутрь цикла и вначале каждой итерации str:=TStringList.create;
То вылетает ошибка виолейшн аксес ...
{RASkov} (2008-03-15 21:08:00) [14]> [9] webSQLNeederr (15.03.08 20:59)
> Что посоветуете?
Убрать блаблабла и проверить... может все дело в блаблабла?
Ну и изменить код с замечаниями из этой ветки в частности замечаниями Анатолия...
И конечно же читать хэлп и разобраться в Clear и Free - что же это...
Anatoly Podgoretsky (2008-03-15 21:05:00) [15]ты принципиально ответы не читаешь, данный код источник неприятностей.
webSQLNeederr (2008-03-15 20:59:00) [16]Короче в чем проблема - у меня в процессе работы программы вот такого типа
str:=TStringList.create;
for i:=0 to 10 do
begin
str.LoadFromFile('...');
blablabla
str.text:='';
end;
str.Free;
Вылетело сообщение, что не хватает памяти. Собственно вот я и думаю как экономить память ... Что посоветуете?
{RASkov} (2008-03-15 20:31:00) [17]> [7] webSQLNeederr (15.03.08 20:25)
> Так Clear или Free ??
Clear - одно очищает, а Free другое совсем...
У тебя вопрос получается не корректным спрашиваешь одно примеры по другому... Спрашиваешь про очистку памяти В стринглисте, а примеры вроде как подразумевают удаление самого стринглиста с памяти.... Вообщем читай хэлп)
webSQLNeederr (2008-03-15 20:25:00) [18]Так Clear или Free ??
MOO (2008-03-15 18:58:00) [19]
> как "правельно" освободить память в TStringList
Ну для начала..начать "правельно" писать
Сергей М. (2008-03-15 18:04:00) [20]блаблабла - это, видать . шибкий намек на неправилбность ?