Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

В динамическом массиве структур - динмчс. массив: возможно ли? [D5, WinME]


BorisKb ©   (2002-12-19 10:04:00) 

type
SumKod=Record
kod: Integer;
naim: String;
SumMesKod: Array of Currency;
end;
Var Nac: Array of SumKod;

Кто-нибудь работал с такой конструкцией? В принципе возможно?
Как только делаю: SumMesKod: Array[1..10] of Currency - все проходит отлично. А с динамическим массивом в динамическом массиве структур (записей) - постоянно гроблю память.
Код не привожу сознательно, меня интересует принципиальная возможность и особенности работы с такой конструкцией(если есть таковые).
Благодарю за сотрудничество.


icWasya   (2002-12-19 11:44:00) [1]

а по поводу утечки памяти посмотрите реализацию TStringList -
там за каждым элементом стоит структура
record
S:String;
O:TObject;
end;
то есть не динамический массив, а строка, но если неаккуратно работать, то будут возникать проблемы с памятью.
Посмотрите, как реализуются изменение длины списка, удаление элементов, обмен ...


zavdim   (2002-12-19 10:38:00) [2]

length(Nac);
length(Nac[i].SumMesKod);
for i :=0 to Pred(length(Nac)) do Nac[i].......


BorisKb   (2002-12-19 10:28:00) [3]

Код от AlexSV не совсем корректен в моем случае. Я до последней считанной записи не знаю ни кол-ва записей ни кол-ва элементов массивов в этих записях.


NailS   (2002-12-19 10:16:00) [4]


> BorisKb ©

Может стоит присмотрется к TList?
Просто в моей практике необходимость в динамическом массиве возникала только при работе с бинарными данными, в остальных случаях удобней было использовать TList


BorisKb   (2002-12-19 10:16:00) [5]

Благодарю еще раз. Значит это мои старческие, толи глаза, толи мозги не видят чего-то. Буду смотреть :)


AlexSV   (2002-12-19 10:16:00) [6]

> ... В принципе возможно?
Да.

procedureInitRec;
var
SizeSumMesKod, SumMesKodID : integer;
begin
SizeSumMesKod := 10;
new(SumKod);
withSumKod do begin
kod := 1;
naim := "naim1";
SetLength(SumMesKod, SizeSumMesKod);
forSumMesKodID := 0 toSizeSumMesKod - 1 do
SumMesKod[SumMesKodID] := <ValueOfCurrency>;
end;
end;

Только при освобождении памяти записи необходимо освобождать и динамический массив.


Skier   (2002-12-19 10:15:00) [7]

>BorisKb
Почитай про SetLength(...) и Finalize(...)


zavdim   (2002-12-19 10:09:00) [8]

ну я работал.
работать надо, конечно, аккуратно и лучше типы все-таки с буквы T начинать.
То есть - принципиальная возможность есть. Дальше не говорю сознательно - не знаю почему (противоречие однако).


Наверх

Титульная страница Поиск, карта сайта Написать письмо