Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как правельно освободить память в TStringList


Страницы:   1 2

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]

блаблабла - это, видать . шибкий намек на неправилбность ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо