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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.044 c
15-1174942974
Германн
2007-03-27 01:02
2007.04.22
Ещё один великий Мастер ушел из жизни!


1-1172204678
Мстилели
2007-02-23 07:24
2007.04.22
Unicode


3-1170237223
mak-shatura
2007-01-31 12:53
2007.04.22
индексы в mdb


1-1172427326
Dmitry_177
2007-02-25 21:15
2007.04.22
Убрать тень от своего курсора в программе


15-1174994817
svbti
2007-03-27 15:26
2007.04.22
Проверка XML-файла





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский