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

Вниз

Консультация по фрагменту кода   Найти похожие ветки 

 
ssmaxx   (2004-11-02 11:07) [0]

Добрый день. Подскажите пожалуйста, в чем проблема:
Есть некий модуль, в нем следующие описания записей:

interface

Type
 ...
 TPoint=Record
   x,y,z:Real;
 end;
 TDXFPolyLine=Record
   Radius,Points:Array of TPoint;
   StartWidth,EndWidth:Array of real;
   Thickness:Byte;
   Extrusion:TPoint;
   Color:Integer;
   Layer:String;
   LineTypeName:String;
   LineTypeScale:Integer;
   Closed:Boolean;
   GlobalWidth:Real;
 end;
 ...
implementation
 ...

Из программы пытаюсь присвоить значение элементам массивов:

...
Var
DXFPoly:TDXFPolyLine;
i,k,KolVertex,RndCh:Integer;
begin
 ...
 For k:=0 to KolVertex do begin
  if k=0 then begin
   DXFPoly.Points[k].x:=Random(100);
   DXFPoly.Points[k].y:=Random(100);
   DXFPoly.Points[k].z:=0;
  end else begin
   DXFPoly.Points[k].x:=DXFPoly.Points[k-1].x+Random(1000)-500;
   DXFPoly.Points[k].y:=DXFPoly.Points[k-1].y+Random(1000)-500;
   DXFPoly.Points[k].z:=0;
  end;
 end;
 ...
 
 При компиляции все нормально, но при первом же обращении к массиву DXFPoly.Points выдается ошибка: ... Access violation at address 00442EE4 in module "Test.exe". Write of address 00000000 ....

Подскажите пожалуйста, что не так ?


 
Digitman ©   (2004-11-02 11:12) [1]

ты не устанавливаешь (или неверно устанавливаешь) длину дин.массива Points перед обращением к k-му его элементу

см. SetLength()


 
Symb   (2004-11-02 11:12) [2]

Массив сначала пустой. Если Пушкин ему размер не задаст, то придется тебе. Иначе при первом же обращении по несуществующему индексу 0 он выдаст тебе Access Violation.
В общем, SetLength(DXFPoly.Points, размер).


 
ssmaxx   (2004-11-02 11:37) [3]

Спасибо большое!
У меня вопрос в догонку: если я задал размер массива, то его после использования не надо каким-либо образом очистить?


 
DiamondShark ©   (2004-11-02 11:43) [4]


> У меня вопрос в догонку: если я задал размер массива, то
> его после использования не надо каким-либо образом очистить?

Не надо. Он очистится как только уйдёт за область видимости.
Если хочется очистить принудительно, то либо SetLength(.., 0), либо присвоить nil.


 
ssmaxx   (2004-11-02 12:05) [5]

Еще раз СПАСИБО !!!



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

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

Наверх




Память: 0.48 MB
Время: 0.04 c
14-1098961486
Игорь_
2004-10-28 15:04
2004.11.14
Функция размера текстового файла


1-1099030313
Василий_М
2004-10-29 10:11
2004.11.14
Утечка памяти в CAPICOM. Как бороться?


1-1099066773
SMT
2004-10-29 20:19
2004.11.14
Ограничение на размер ресурсовых строк в exe-файле


14-1097962722
Кто---то
2004-10-17 01:38
2004.11.14
Есть ли стандартный Диалог с КомбоБоксом ?


14-1099073229
Zacho
2004-10-29 22:07
2004.11.14
Что-нибудь свеженькое из фантастики