Главная страница
    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.038 c
1-1172160963
Undertaker-wwf
2007-02-22 19:16
2007.04.22
FloatToStr и TFormatSettings - проблема с ThousandSeparator


11-1156039661
Psychedelic
2006-08-20 06:07
2007.04.22
Прозрачность в Bitmap


8-1155229468
Der Nechk@ssoff
2006-08-10 21:04
2007.04.22
Перемотка но окончании трека


15-1174982714
vajo
2007-03-27 12:05
2007.04.22
Доступ к файлу Access


15-1174733013
Alexander Panov
2007-03-24 13:43
2007.04.22
До чего ж плодовитый автор





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