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