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

Вниз

record в record е   Найти похожие ветки 

 
Knock   (2007-04-02 11:39) [0]

Привет. Пишу на KOL. Есть код:

type
 PPoints = ^TPoints;
 TPoints = record
   InPoint: integer;
   OutPoint: integer;
 end;  

 PPlug = ^TPlug;
 TPlug = record
   GetInfo: string;
   Copyright: string;
   FileName: string;
   CompilerName: string;
   Points: array of PPoints;
 end;


Далее в процедуре:

{Points}
 SetLength(Points, 0);
 repeat
   p := pos(Delimiter, str);
   if p = 0 then Continue;
   s := Copy(str, 1, p - 1);
   Delete(str, 1, p);
   if s = "" then Continue;

   p := pos(".", s);
   if p = 0 then Continue;
   InPoint := Str2Int(Copy(s, 1, p - 1));
   Delete(s, 1, p);
   OutPoint := Str2Int(s);

   Len := Length(Points) + 1;
   SetLength(Points, Len);
   Points[Len] := New(PPoints);

   Points[Len].InPoint := InPoint;
   Points[Len].OutPoint := OutPoint;

   showmessage(int2str(Points[Len].InPoint));
   showmessage(int2str(Points[Len].OutPoint));
 until str = "";


Проблема: на второй итерации цикла вылетает RunTime Error 204 в строке SetLength(Points, Len).
Что не так? Подскажите, я только учусь :)


 
Dmitriy___   (2007-04-02 11:41) [1]

Да, в самом начале процедуры, конечно же
Plug := New(PPlug);


 
DrPass ©   (2007-04-02 11:45) [2]


>    Points[Len] := New(PPoints);
>
>    Points[Len].InPoint := InPoint;
>    Points[Len].OutPoint := OutPoint;

Если Points - это динамический массив, то
Points[Len - 1] := New(PPoints);
Points[Len - 1].InPoint := InPoint;
Points[Len - 1].OutPoint := OutPoint;

Если нет, то и SetLength тут не к месту


 
Dmitriy___   (2007-04-02 13:26) [3]

Именно, что динамический. Поэтому у меня написан SetLength. И первый раз он срабатывает, а во второй даёт ошибку.

> Points[Len - 1]

У меня Points[Len + 1], т.е. в каждой петле цикла количество элементов массива наращивается.

Не пойму, в чём тут дело. Ведь первая-то петля работает!


 
SlymRO ©   (2007-04-02 13:37) [4]

У динам масивов zero based indexing, т.е. последний элемент это Length(Points)-1! а у тебя Length(Points)


 
SlymRO ©   (2007-04-02 13:38) [5]

Dmitriy___   (02.04.07 13:26) [3]
первая-то петля

для тебя и последняя... (черный юмор)


 
Dmitriy___   (2007-04-02 14:17) [6]


> для тебя и последняя... (черный юмор)

Нет, я буду биться до конца! Только не говори "...своего" :D

Ой, спасибо большое! Помогло-таки. Есть пробелы в образовании, блин.


 
MBo ©   (2007-04-02 14:21) [7]

С какой целью массив PPoints, а не TPoints используется?


 
Dmitriy___   (2007-04-02 18:19) [8]


> С какой целью массив PPoints, а не TPoints используется?

Ну так чтоб в стеке не хранить, мало ли что... А что, лучше без него обойтись?

К слову. Хочу присобачить эту запись к pStrList. Что-то типа List.AddObject(Plug.GetInfo, Cardinal(@Plug) ). Ага, приклею, а как её потом читать? Что-то конструкция а-ля

Plug := New(PPlug);
Plug := PPlug(HeaderList.Objects[i]);

не приводит к успеху.
И ещё, напоследок. Я на пары не ходил, часто забивал, и теперь не знаю, нужно ли будет делать Dispose всем объектам списка, ведь память для них выделить-то я выделил, а освобождать кто должен?


 
MBo ©   (2007-04-02 20:22) [9]

>Ну так чтоб в стеке не хранить,
данные динамического массива не хранятся в стеке.

>А что, лучше без него обойтись?
Конечно.


 
Dmitriy___   (2007-04-02 21:43) [10]

Понял, спасибо.
О том, как правильнее прилепить структуру к списку, вопрос снимается, всё пучком.
А вот о том, надо ли уничтожать все указатели и связанные с ними структуры, остаётся. Кто что скажет?


 
MsGuns ©   (2007-04-02 23:07) [11]

Надо. Или заменить вложенные рекорды на коллекцию


 
Dmitriy___   (2007-04-02 23:33) [12]


> заменить вложенные рекорды на коллекцию

На KOL же пишу. Пытаюсь :)


 
MsGuns ©   (2007-04-02 23:43) [13]

А что, блондинки мешают пиву ?



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

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

Наверх




Память: 0.49 MB
Время: 0.626 c
2-1175226199
Dismember
2007-03-30 07:43
2007.04.22
Перемещение формы за Panel


15-1174786694
Марк
2007-03-25 05:38
2007.04.22
У кого-нибудь есть флеш-видак?


15-1174656149
Andre_s
2007-03-23 16:22
2007.04.22
Жидкокристаллические 17"


2-1175495435
Dmitry_177
2007-04-02 10:30
2007.04.22
Убрать дату с поля SQL-запросом


3-1170513670
Itonix
2007-02-03 17:41
2007.04.22
Разница в компонентах