Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Invalid Pointer Operation при работе с дин. массивом. [D7, Win95/98, WinXP]


Kolan ©   (2005-09-10 14:25:00) 

Здравствуйте,
 Вот проблемма:
 Есть у меня большая структура:

PMeasurmentData = ^TMeasurmentData;
 TMeasurmentData = record
   {OutPut}
   OutPutGraff: TArrayOfTPair;
   OutPutMeasurments: TArrayOfMeasurmentGrid;
   OutPutResAntiRes: TArrayOfTPair;
   OutPutName: string;
   OutPutCapacity: Double;

   {Future compatibility.}
   OutPutActiveGarff: TArrayOfTPair;

   {InPut}
   InPutRange: TArrayOfLongint;
   InPutFindResonanceRange: TArrayOfLongint;
   InPutStep: Single;
   InPutOperator: string;
   InPutDevice: string;
   InPutDateTime: TDateTime;
   InPutNumber: Integer;

   {}
   IsThisRecordFilled: Boolean;
   MeasurmentState: TMeasurmentStates;

   CurrentPosition: Longint;
   LastCalledPosition: Longint;
 end;


Работа сней заключается в заполнении её дин. массивов. для этого я сначала инициализирую её:

with MeasurmentDataRec^ do
 begin
  {...}

   if InPutStep = 0 then
     GreffLength := 0
   else
     GreffLength := Round( (InPutRange[High(InPutRange)]
       - InPutRange[Low(InPutRange)] ) / InPutStep) + 1;

   SetLength(OutPutGraff, GreffLength);

   SetLength(OutPutMeasurments, 0);
    SetLength(OutPutResAntiRes, 0);
   {Future compatibility.}
   SetLength(OutPutActiveGarff, 0);
   OutPutCapacity := 0;
   OutPutName := IntToStr(Number) + ' ' + Device;
   IsThisRecordFilled := True;
   CurrentPosition := 0;
   LastCalledPosition := 0;
 end;
   

Ну а потом заполняю. Числа приходят с прибора, а всё это дело крутится в потоке.

Размер массива OutPutGraff(это график того что пришло с прибора) зависит от InPutRange(это левый и правый края отрезка, значений X ).

Кроме того таких стуктур у меня много.

Ошибка такая: Установил я пределы 43000 и 44000 с шагом 10 те кол во эл OutPutGraff = 101.

Всё нормально. Если я теперь сделаю 43000 43100 то получу Invalid Pointer Operation в выделенной строке.

Причем  если я померел первое измерение(напоминаю у меня  много таких записей ) 43000 и 44000 потом второе 43000 43100 и сново вернулся к первому , и измеряю 43000 43100 то ошибки нет.

А если подрад одно и тоже мерить то ошибка есть.

Вопрос где её искать?


Ученик чародея   (2005-09-12 23:35:00) [1]

>>Kolan ©   (10.09.05 14:25)

Мухоморы и бубен не пробовали? В таких случаях помогает.


DiamondShark   (2005-09-12 23:30:00) [2]

В приведённом фрагменте ошибок нет.
В приведённом описании смысла нет.


Kolan   (2005-09-12 23:10:00) [3]

up


Наверх

Титульная страница Поиск, карта сайта Написать письмо