Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.12.26;
Скачать: [xml.tar.bz2];

Вниз

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

 
Фсщкгі   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.007 c
7-86193
Zombik666
2002-10-23 15:01
2002.12.26
BASIC to ASM


3-85834
Dbrf
2002-12-06 14:04
2002.12.26
Удаление строк подчинённой таблицы


14-86113
Igorek
2002-11-28 19:38
2002.12.26
Нужен ModelMaker из Delphi7


8-86040
Dad Evil
2002-09-09 14:17
2002.12.26
обрезка TBitmap


8-86041
Дельфятник
2002-09-09 16:54
2002.12.26
Помогите разобраться с рисованием, пожалуйста.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский