Вниз
Скачать: CL | DM;

"Освобождение структуры"   Найти похожие ветки 

 
race1   (2007-08-03 16:23) [0]

Есть такая структура:
TRec = record
 num: Integer;
 str: String;
end;

И указатель на неё:
PRec = ^TRec;

Я выделяю память:
...
r: PRec;
...
New(r);

И присваиваю значение:
r^.num := 1;
r^.str := "str";

Как теперь правильно удалить всю выделенную память?

1. Dispose(r);
2. r^.str := "";
 Dispose(r);


 
Сергей М. ©   (2007-08-03 16:25) [1]

Dispose(r);


 
DVM ©   (2007-08-03 16:32) [2]


> race1  

О string компилятор позаботится сам.


 
race1   (2007-08-03 16:35) [3]

FastMM4 ругается на утечку памяти... После того как сделал второй вариант, ругаться перестал.


 
DVM ©   (2007-08-03 16:39) [4]


> race1  

а у меня не ругается


 
race1   (2007-08-03 16:46) [5]

Нашёл багу. У меня список указателей и я в цикле освобождаю память:
for i := 0 to List.Count - 1 do
 Dispose(List[i]);

Если сделать приведение, то утечка исчезнет:
for i := 0 to List.Count - 1 do
 Dispose(PRec(List[i]));

Спасибо вам :)


 
AlexWlad ©   (2007-08-03 18:43) [6]

Для строк делай Finalize(r^.str) и будет тебе щастье.


 
Dib@zol ©   (2007-08-03 18:44) [7]

А не лучше ли GetMem/FreeMem???


 
Инс ©   (2007-08-03 18:57) [8]


> А не лучше ли GetMem/FreeMem???

В данном случае - думаю нет. FreeMem не освободит память под строку.


 
Суслик ©   (2007-08-03 23:02) [9]


> race1   (03.08.07 16:46) [5]
> Нашёл багу. У меня список указателей и я в цикле освобождаю
> память:
> for i := 0 to List.Count - 1 do
>  Dispose(List[i]);
>
> Если сделать приведение, то утечка исчезнет:
> for i := 0 to List.Count - 1 do
>  Dispose(PRec(List[i]));
>
> Спасибо вам :)

логично - ибо не знает компилятор на что указывает указатель.



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

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.018 c
4-1176956104
roughneck
2007-04-19 08:15
2007.10.21
Подсказки


1-1186377350
Berkut
2007-08-06 09:15
2007.10.21
Передеча форматированного текста в Word


6-1172044540
jiny
2007-02-21 10:55
2007.10.21
Как подкл. ч-з TCPClient, отправить строку "GET" и пол.ответ ?


15-1190464568
me
2007-09-22 16:36
2007.10.21
Сайты, форумы для изучающих английский


2-1190362266
АндрейК
2007-09-21 12:11
2007.10.21
Delphi7 и FastReport 3.19




   Наверх