Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.04;
Скачать: CL | DM;

Вниз

string в record   Найти похожие ветки 

 
VaS ©   (2002-10-23 21:06) [0]

type
PRec = ^TRec;
TRec = record
s: string;
end;
...
var
Rec: PRec;
begin
New(Rec);
try
Rec.s:="A string";
finally
Dispose(Rec);
end;
end;


Есть опасения, что память, выделенная под строку не освободится. Это так?


 
SottNick   (2002-10-24 06:44) [1]

А так пробовал?
TRec = record
s: string[255];
end;


 
Bis   (2002-10-24 08:23) [2]

если у тебя строки короткие, то все ок.
если длинные, то компилятор сам должен заботится об освобождении памяти, выделенной для символов строки.


 
SVM (Perm)   (2002-10-24 08:51) [3]

Dispose и New вроде как освобождают.
GetMem и FreeMem - нет, надо делать Finalize.


 
Skier ©   (2002-10-24 10:00) [4]

>VaS
Этот вопрос часто задаётся.
Ответ такой : и FreeMem и Dispose освободят строку.


 
McSimm ©   (2002-10-24 10:28) [5]

И ответ неправильный.

Правильный ответ - Dispose освободит. FreeMem - нет.


 
Skier ©   (2002-10-24 10:31) [6]

>McSimm
IMHO, ты не прав.


 
Bis   (2002-10-24 10:39) [7]

народ, лучше проверить, чем спорить или указать где толково объяснено.

Кто знает, как прочитать значение счетчика строк для энси-строк?
Тогда можно сделать тест.


 
Skier ©   (2002-10-24 10:41) [8]

>McSimm
Да.
Я прогнал FreeMem чрез Alt+Ctrl+C
Finalize не вызывается.
Видимо ты прав.


 
Anatoly Podgoretsky ©   (2002-10-24 10:42) [9]

Skier © (24.10.02 10:31)
Попробуй это подтвердить


 
McSimm ©   (2002-10-24 10:44) [10]

>Skier © (24.10.02 10:31)

>>McSimm
>IMHO, ты не прав.


Вполне допуская такую возможность, тем не менее остаюсь при своем мнении.
Поскольку внимательно изучал работу со строками.

Давай обмениваться аргументами. Вот, для начала, выдержка из справки по процедуре Fianlization:
--
If a dynamic variable meets the following two conditions, a call to Finalize is required to finalize the variable before it can be deallocated.

- The variable is deallocated by other means than the Dispose standard procedure (for example using FreeMem).
- The variable contains long strings, variants, or interfaces, not all of which are empty or Unassigned.
--



 
Skier ©   (2002-10-24 10:46) [11]

>McSimm © (24.10.02 10:44)
см. Skier © (24.10.02 10:41)
А вообще-то нужно привлечь к этой ветке внимание, чтобы
разобраться с этим раз и навсегда, т.к. вопрос часто задаётся
и спор разгорается каждый раз с новой силой.


 
McSimm ©   (2002-10-24 10:46) [12]

>Skier © (24.10.02 10:41)
Когда писал еще не видел твоего сообщения.
Так что адресую свое предыдущее сообщение всем как резюме по данному вопросу.


 
McSimm ©   (2002-10-24 10:51) [13]

>Skier © (24.10.02 10:46)

Дело в том, что многие уже разобрались раз и навсегда.
Но вопрос действительно не теряет актуальности.
(Давно хочу написать статью на тему тонкостей работы со строками, но, видимо, никогда не закончу :( )


 
Skier ©   (2002-10-24 10:55) [14]

>McSimm

> Дело в том, что многие уже разобрались раз и навсегда.

Ага. И я тожу уже. :)


 
VaS ©   (2002-10-24 14:17) [15]

Так-с... :))) Господа разобравшиеся, теперь аргументированно докажите, что память таки освождается.


 
Bis ©   (2002-10-24 14:20) [16]

история повторяется снова и снова
и кто придумал эту спираль? Не Архимед случайно? ))



Страницы: 1 вся ветка

Текущий архив: 2002.11.04;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.018 c
1-11148
DeMoN-777
2002-10-22 17:22
2002.11.04
Как скинсэйвер


3-11111
Andrew_
2002-10-16 12:14
2002.11.04
Help! Срочно. Как поправить файл Paradox


1-11168
DJ LLL
2002-10-24 14:40
2002.11.04
Report


14-11409
Шишкин Илья
2002-10-13 22:53
2002.11.04
Кто-нить из Вас знаком с группой


14-11422
TTCustomDelphiMaster
2002-10-14 22:53
2002.11.04
MyMail.com