![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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