![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Всем привет!
Народ, есть проблема. Почему-то в Delphi 2007 выскакивает ошибка Access Violation на SetLength(); Метод в procedure SystemODU.adams; первая строчка. Код:
unit AdamsUnit; interface type SystemODU = class protected Y :array of array of real; X: array of Real; h, e, a, b:real; u:integer; public procedure adams; procedure setH(new_h:real); procedure setA(new_a:real); procedure setB(new_b:real); end; implementation procedure SystemODU.setH; begin h := new_h; end; procedure SystemODU.setA; begin A := new_a; end; procedure SystemODU.setB; begin B := new_b; end; procedure SystemODU.adams; var i: integer; begin SetLength(y, 3, 30);//!!!ВОТ ТУТ И ВСЕ ЛЕТИТ SetLength(x,30); SetLength(); h:=0.05; e:= 0.01; Y[0,1]:=1; Y[1,1]:=1; Y[2,1]:=1; repeat u:=1; for i:=1 to 2 do begin Y[0, i+1]:=Y[0, i]+h*(Y[0, i]+h/2*(3*Y[1, i]-2*Y[2, i])); Y[1, i+1]:=Y[1, i]+h*(Y[1, i]+h/2*(-Y[2, i]-3*Y[0, i])); Y[2, i+1]:=Y[2, i]+h*(Y[2, i]+h/2*(2*Y[0, i]-Y[1, i])); end; h:=h/2; for i:=1 to 2 do begin Y[0, i+1]:=Y[0, i]+h*(Y[0, i]+h/2*(3*Y[1, i]-2*Y[2, i])); Y[1, i+1]:=Y[1, i]+h*(Y[1, i]+h/2*(-Y[2, i]-3*Y[0, i])); Y[2, i+1]:=Y[2, i]+h*(Y[2, i]+h/2*(2*Y[0, i]-Y[1, i])); end; until ((abs(Y[0,2])-Y[0, 3])<=(3*e)) and ((abs(Y[1,2])-Y[1,3])<=(3*e)) and ((abs(Y[2,2])-Y[2,3])<=(3*e)); h:=h*2; for i:=2 to (round((b-a)/h)+1) do begin Y[0, i+1]:=Y[0, i]+h/2*(3*(3*Y[1, i]-2*Y[2, i])-(3*Y[1, i-1]-2*Y[2, i-1])); Y[1, i+1]:=Y[0, i]+h/2*(3*(-Y[2, i]-3*Y[0, i])-(-Y[2,i-1]-3*Y[0, i-1])); Y[2, i+1]:=Y[0, i]+h/2*(3*(2*Y[0, i]-Y[1, i])-(2*Y[0,i-1]-Y[1, i-1])); X[i]:=a+h*(i-1); end; end; end. Метод вызывается при старте программы в onActivate. Просто это по сути получается у меня первая строчка, которая должна работать и сразу ошибка. Если ее закоментить, то все работает норм(в смысле без использования переменной Y, но мне ее нужно использовать). Помогите, Пожалуйста! |
#2
|
||||
|
||||
![]() Ты пытаешься установить размер классу, а нужно объекту класса...
Т.е. ты сначала должен объявить объект типа SystemODU... Обычно класс (тип, запись) называют Код:
TSystemODU Код:
SystemODU: TSystemODU В начале был Бит, потом Байт и только потом появилось Слово... |
#3
|
|||
|
|||
![]() Спасибо большое, смысл ошибки я понял, сейчас попытаюсь исправить!
|