Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.06.2010, 09:04
bysergey bysergey вне форума
Прохожий
 
Регистрация: 07.06.2010
Сообщения: 2
Репутация: 10
По умолчанию Ошибка Access Violation от SetLength

Всем привет!
Народ, есть проблема.
Почему-то в 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  
Старый 07.06.2010, 09:17
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Ты пытаешься установить размер классу, а нужно объекту класса...
Т.е. ты сначала должен объявить объект типа SystemODU...
Обычно класс (тип, запись) называют
Код:
TSystemODU
, а объект
Код:
SystemODU: TSystemODU
Потом ты должен объект создать...И только потом можно с ним работать...
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #3  
Старый 07.06.2010, 11:25
bysergey bysergey вне форума
Прохожий
 
Регистрация: 07.06.2010
Сообщения: 2
Репутация: 10
По умолчанию

Спасибо большое, смысл ошибки я понял, сейчас попытаюсь исправить!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:58.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025