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

Вниз

Дерево :)   Найти похожие ветки 

 
Фсщкгі   (2002-12-16 14:16) [0]

Нужно динамически создать экземпляр структуры так чтобы при выходе из функции (где она создается) не терять структуру. То есть следующий вариант НЕ ПРЕДЛАГАТЬ:

...
var node: TStructure;
begin
node := TStructure.Create;
...
end;


 
KoluChi ©   (2002-12-16 14:20) [1]

function ...: TStructure;
var node: TStructure;
begin
Result := TStructure.Create;
...
end;


 
Acorus ©   (2002-12-16 14:23) [2]

Да нет! - мне нужно в этой функции дерево строить - так что нужно чтоб структурка динамически в памяти оставалась


 
Skier ©   (2002-12-16 14:26) [3]

>Acorus
Так она и останется если ты будешь
использовать (при создании) или объекты или дин. структуры,
а из функции возвращать указатель на корень дерева.


 
KoluChi ©   (2002-12-16 14:27) [4]

>так что нужно чтоб структурка динамически в памяти оставалась
А кто/что мешает?
Адрес структуры все-равно нужно возвращать, а для этого есть только 2 способа:
1. Результат функции.
2. Параметр функции.


 
Acorus ©   (2002-12-16 14:37) [5]

специфика в том что эта функция - колбэк из 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;
...


 
Skier ©   (2002-12-16 14:42) [6]

>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:47) [7]

O! - оно !
- я просто Дельфы не знаю
- СПАСИБО! :))



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

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

Наверх




Память: 0.48 MB
Время: 0.015 c
3-85808
sasha123
2002-12-06 10:23
2002.12.26
Как связать горизонтальную прокрутку в DBGrid c HeaderControl


1-85996
abat
2002-12-16 12:02
2002.12.26
Проверка существования объекта


1-86023
de2
2002-12-16 14:59
2002.12.26
обращение к объекту модальной формы


3-85795
Wic42
2002-12-06 00:07
2002.12.26
Delphi6-DBF


3-85817
Romkin
2002-12-06 11:17
2002.12.26
attempted update of read-only column