![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Дерево :) [D2]
Фсщкгі © (2002-12-16 14:16:00)Нужно динамически создать экземпляр структуры так чтобы при выходе из функции (где она создается) не терять структуру. То есть следующий вариант НЕ ПРЕДЛАГАТЬ:
...
var node: TStructure;
begin
node := TStructure.Create;
...
end;
Acorus (2002-12-16 14:47:00) [1]O! - оно !
- я просто Дельфы не знаю
- СПАСИБО! :))
Skier (2002-12-16 14:42:00) [2]>Acorus
Видимо у тебя Temp объявлен
var
Temp : TSomeRecord;
begin
end;
и, естественно, при таком подходе после
выхода из функции никакого Temp в памяти уже не будет !
Тебе нужно пользоваться дин. структурой и выделять
под неё память самостоятельно.
PSomeRecord = ^TSomeRecord;
var
Temp : PSomeRecord;
begin
New(Temp);
//.......
pPrev.Next := Temp;
end;
Acorus (2002-12-16 14:37:00) [3]специфика в том что эта функция - колбэк из API (у нее все фиксированно - параметры и результат - ничего из предложенного не подходит) - она дает мне инфу для каждого нода в дереве
первый раз получаю рута
при каждой следующей итерации прицепляю новую ноду - для этого нужно чтоб предыдущие ноды (структурки) сохранялись в динамической памяти так как прицепление должно происходить примерно так:
...
if pPrev <> Nil then
pPrev.Next := @Temp;
if (pParent <> Nil) And (pParent.Child = Nil) then
pParent.Child := @Temp;
if (pParent = Nil) and (pPrev = Nil) then
root := Temp;
...
KoluChi (2002-12-16 14:27:00) [4]>так что нужно чтоб структурка динамически в памяти оставалась
А кто/что мешает?
Адрес структуры все-равно нужно возвращать, а для этого есть только 2 способа:
1. Результат функции.
2. Параметр функции.
Skier (2002-12-16 14:26:00) [5]>Acorus
Так она и останется если ты будешь
использовать (при создании) или объекты или дин. структуры,
а из функции возвращать указатель на корень дерева.
Acorus (2002-12-16 14:23:00) [6]Да нет! - мне нужно в этой функции дерево строить - так что нужно чтоб структурка динамически в памяти оставалась
KoluChi (2002-12-16 14:20:00) [7]function ...: TStructure;
var node: TStructure;
begin
Result := TStructure.Create;
...
end;