Форум: "Основная";
Текущий архив: 2007.10.21;
Скачать: [xml.tar.bz2];
Вниз"Освобождение структуры" Найти похожие ветки
← →
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 вся ветка
Форум: "Основная";
Текущий архив: 2007.10.21;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.041 c