Главная страница
    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.056 c
10-1131727900
Георгий
2005-11-11 19:51
2007.04.22
Delphi+Excel


2-1175166797
Megabyte
2007-03-29 15:13
2007.04.22
Помогите найти ошибку в запросе


2-1175681440
bagos
2007-04-04 14:10
2007.04.22
динамическое создание компонента


3-1169972469
a1x
2007-01-28 11:21
2007.04.22
Vista + ADOX_TLB


2-1175163152
Alex7
2007-03-29 14:12
2007.04.22
Какой Select выбирает текст не зависимо от регистра





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