![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Free дерева
KADAN © (2004-07-22 16:37:00)мне нужно очистить память, выделенную под дерево. думал, что просто будет сделать так:
procedure FreeTree(var T: PTree);
begin
case T^.NodeType of
ntType1:
begin
FreeTree(T^.Left);
FreeTree(T^.Right);
end;
ntType2:
FreeTree(T^.Center);
end;
dispose(T);
end;
оказалось, так делать нельзя... как проверить, выделена ли память под ветви, а то поятоянно выскакивают AV и IPO.
само дерево выглядит так:
type
PTree = ^TTree;
TTree = record
case NodeType:TNodeType of
ntType1:
(Left, Right: PTree);
ntType2:
(Center: PTree);
ntType3:
();
end;
вообще, это дерево у меня - результат выполнения рекурсивной функции... мне бы хотелось, чтобы при возникновении ошибки эта функция сама бы очистила уже выделенную память и вернула nil.
KADAN (2004-07-22 16:49:00) [21]Iconka © (22.07.04 16:47) [3]
простите, недопонял...
Sandman25 (2004-07-22 16:49:00) [22][2] KADAN © (22.07.04 16:46)
А подумать?
Наводящий вопрос - есть ли какие-нибудь nil в Вашей структуре.
Iconka (2004-07-22 16:47:00) [23]
>
> > if T=nil then...
>
> они не nil в том то и дело....
тогда
T:= nil
if T=nil then...
KADAN (2004-07-22 16:46:00) [24]
> if T=nil then...
они не nil в том то и дело....
Sandman25 (2004-07-22 16:39:00) [25]if T=nil then...