Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2013, 22:12   #1
LLIALLIJIbIK
Пользователь
 
Регистрация: 26.08.2010
Сообщений: 51
По умолчанию Ошибка Access violation

Возникает ошибка Access violation:

Код:
for j:=0 to (count-1) do begin
      for k:=0 to 33 do begin
        VibrationsLevels[k,j]:=StringGridArr[k,j]-Drop[k,j]-Kpp[k,j]; //здесь
        VibrationsLevels[k,j]:=q0*power(10,(VibrationsLevels[k,j]/20));
 VibrationsLevelsMain[k]:=VibrationsLevelsMain[k]+sqrt(power(VibrationsLevels[k,j],2));
      end;
    end;
Возникает только когда count присвоено значение 3 и выше. Длину массива VibrationsLevels я устанавливаю SetLength(34,count);
LLIALLIJIbIK вне форума Ответить с цитированием
Старый 02.07.2013, 22:48   #2
iworm2009
Пользователь
 
Регистрация: 07.05.2013
Сообщений: 51
По умолчанию

StringGridArr[k,j]-Drop[k,j]-Kpp[k,j] существуют?
iworm2009 вне форума Ответить с цитированием
Старый 02.07.2013, 22:49   #3
LLIALLIJIbIK
Пользователь
 
Регистрация: 26.08.2010
Сообщений: 51
По умолчанию

Да существуют. Когда count меньше 3, то все работает
LLIALLIJIbIK вне форума Ответить с цитированием
Старый 02.07.2013, 22:58   #4
iworm2009
Пользователь
 
Регистрация: 07.05.2013
Сообщений: 51
По умолчанию

покажите описание ваших переменных
iworm2009 вне форума Ответить с цитированием
Старый 02.07.2013, 23:05   #5
LLIALLIJIbIK
Пользователь
 
Регистрация: 26.08.2010
Сообщений: 51
По умолчанию

Юнит 1:

Код:
var
  Vib: TVib;
  fp,Jp,fgr,cpr,Me,Mpp,Me1,Me2,Me3,Me4,Me5,f,al,ff2,FF,beta:double;
  Frequency:array[0..33] of double=(5, 6.3, 8, 10, 12.5, 16, 20, 25, 31.5, 40, 50, 63, 80, 100, 125, 160, 200, 250, 315, 400, 500, 630, 800, 1000, 1250, 1600, 2000, 2500, 3150, 4000, 5000, 6300, 8000, 10000);
  Resistance:array of array of double;
  Force:array of array of double;
  Drop:array of array of double;
  ResStiffFrame:array[0..33] of double;
  ResStiffMech:array of array of double;
  Ad:array of double;
  a:array of double;
  b:array of double;
  c:array of double;
  d:array of double;
  VibrationsLevels:array of array of double;
  VibrationsLevelsMain:array[0..33] of double;
  Kp:array[0..33] of double;
  Kpp:array of array of double;
  s1,s2,s3,s4,s5:TLineSeries;
  Series:TLineSeries;
  Chart1:TChart;
  MainForce:array[0..33] of double;
  counter,counsave:integer;
Юнит 2:

Код:
var
  MechanismAmortization: TMechanismAmortization;
  Mechanism:array of double;
  Abscissa:array of double;
  Ordinate:array of double;
  Stiffness:array of double;
  Path:array of string;
  Mass:array of double;
  ff1:array of double;
  Z1:array of double;
  StringGridArr:array of array of Double;
  Z2:array of double;
  Z3:array of double;
  VibroNum:array of integer;
  count:integer;
  t:integer;
  tt:integer;
  vibrations:TStringList;
  VibrationsArr:array of array of double;
  Series:TLineSeries;
  Chart1:TChart;
Юнит 3:

Код:
var
  Calculation: TCalculation;
  l:integer;
  Mpmin,Mpmax,Hplmin,Hplmax,{kmmin,kmmax,}kbmin,kbmax:double;
  nos:integer;
  MpOpt:array of double;
  MppOpt:array of double;
  MeOpt:array of double;
  HplOpt:array of double;
  JpOpt:array of double;
  KmOpt:array of array of double;
  MassOpt:array of array of double;
  Z3Opt:array of array of double;
  Z2Opt:array of array of double;
  Z1Opt:array of array of double;
  ResistanceOpt:array of array of array of double;
  DropOpt:array of array of array of double;
  VibrationsLevelsOpt:array of array of array of double;
  VibrationsLevelsMainOpt:array of array of double;
  ForceOpt:array of array of array of double;
  ResStiffFrameOpt:array of array of double;
  ResStiffMechOpt:array of array of array of double;
  KbOpt:array of double;
  MainForceOpt:array of array of double;
  EndForceOpt:array[0..33] of double;
  ForceValOpt:array[0..33] of double=(0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.004985, 0.00497, 0.004955, 0.00494, 0.004925, 0.00491, 0.004895, 0.00488, 0.004865, 0.00485, 0.004835, 0.00482, 0.004805, 0.00479, 0.004775, 0.00476, 0.004745, 0.00473, 0.004715, 0.0047);
  ForceValGraph:array[0..33] of double;
  ArrOpt:array of array of double;
  countt:integer;
  tmax:double;
  imax:integer;
Для большинства массивов потом делаю SetLength
LLIALLIJIbIK вне форума Ответить с цитированием
Старый 02.07.2013, 23:06   #6
iworm2009
Пользователь
 
Регистрация: 07.05.2013
Сообщений: 51
По умолчанию

и что это за строчка такая SetLength(34,count); ?
iworm2009 вне форума Ответить с цитированием
Старый 02.07.2013, 23:11   #7
LLIALLIJIbIK
Пользователь
 
Регистрация: 26.08.2010
Сообщений: 51
По умолчанию

count это счетчик кнопки, определяется в другом юните. и когда он меньше 3, то все в порядке. Когда больше появляется Access violation.
LLIALLIJIbIK вне форума Ответить с цитированием
Старый 02.07.2013, 23:14   #8
iworm2009
Пользователь
 
Регистрация: 07.05.2013
Сообщений: 51
По умолчанию

на самом деле нужно было увидеть
Код:
 Drop:array of array of double;
StringGridArr:array of array of Double;
Kpp:array of array of double;
VibrationsLevels:array of array of double;
теперь где для них SetLength?
iworm2009 вне форума Ответить с цитированием
Старый 02.07.2013, 23:24   #9
LLIALLIJIbIK
Пользователь
 
Регистрация: 26.08.2010
Сообщений: 51
По умолчанию

Код:
procedure TMechanismAmortization.SpeedButton5Click(Sender: TObject);
var
  i,j:integer;
begin
  count:=count+1;
  if count>1 then begin
    for i:=0 to count-2 do begin
      if (Abscissa[i]=StrToFloat(Edit2.Text)) and (Ordinate[i]=StrToFloat(Edit3.Text)) then
        ShowMessage('В этих координатах уже есть механизм механизм');
    end;
  end;
  if count<2 then begin
    if not (Edit1.Text='') and not (Edit2.Text='') and not (Edit3.Text='') and not (Edit4.Text='') and not (Edit5.Text='') and not (Edit6.Text='') and not (Edit1.Text='0') and not (Edit4.Text='0') and not (Edit5.Text='0') then begin
      SetLength(Mechanism,count);
      SetLength(Abscissa,count);
      SetLength(Ordinate,count);
      SetLength(Mass,count);
      SetLength(Path,count);
      SetLength(ff1,count);
      SetLength(Z1,count);
      SetLength(Z2,count);
      SetLength(Z3,count);
      SetLength(Ad,count);
      SetLength(a,count);
      SetLength(b,count);
      SetLength(c,count);
      SetLength(d,count);
      SetLength(ResStiffMech,34,count);
      SetLength(VibrationsLevels,34,count);
      SetLength(Drop,34,count);
      SetLength(Force,34,count);
      SetLength(Resistance,34,count);
      SetLength(VibroNum,count);
      SetLength(Stiffness,count);
      Mechanism[count-1]:=StrToFloat(Edit1.Text);
      Abscissa[count-1]:=StrToFloat(Edit2.Text);
      Ordinate[count-1]:=StrToFloat(Edit3.Text);
      VibroNum[count-1]:=StrToInt(Edit4.Text);
      Stiffness[count-1]:=StrToFloat(Edit5.Text);
      Path[count-1]:=Edit6.Text;
      if count=5 then begin
        ShowMessage('Граничное число элементов типа Механизм');
        SpeedButton3.Enabled:=False;
      end;
      Edit1.Enabled:=False;
      Edit2.Enabled:=False;
      Edit3.Enabled:=False;
      Edit4.Enabled:=False;
      Edit5.Enabled:=False;
      Edit6.Enabled:=False;
      SpeedButton5.Enabled:=False;
      SpeedButton6.Enabled:=False;
      SpeedButton3.Enabled:=True;
      SpeedButton8.Enabled:=False;
      count:=t-tt;
      Label7.Caption:=IntToStr(t);
      Vib.Label5.Caption:=Label7.Caption;
      for i:=count-1 to count-1 do
        Vib.Label7.Caption:=FloatToStr(StrToFloat(Vib.Label7.Caption)+VibroNum[i]);
      if count>=2 then begin
        SpeedButton1.Enabled:=True;
        SpeedButton4.Enabled:=True;
      end;
    end
    else ShowMessage('Параметры введены некорректно');
  end;
  if count>=2 then begin
    for j:=0 to count-2 do begin
      if not (Edit1.Text='') and not (Edit2.Text='') and not (Edit3.Text='') and not (Edit4.Text='') and not (Edit5.Text='') and not (Edit6.Text='') and not (Edit1.Text='0') and not (Edit4.Text='0') and not (Edit5.Text='0') and not ((Abscissa[j]=StrToFloat(Edit2.Text)) and (Ordinate[j]=StrToFloat(Edit3.Text))) then begin
        SetLength(Mechanism,count);
        SetLength(Abscissa,count);
        SetLength(Ordinate,count);
        SetLength(Mass,count);
        SetLength(Path,count);
        SetLength(ff1,count);
        SetLength(Ad,count);
        SetLength(a,count);
        SetLength(b,count);
        SetLength(c,count);
        SetLength(d,count);
        SetLength(Z1,count);
        SetLength(Z2,count);
        SetLength(Z3,count);
        SetLength(VibroNum,count);
        SetLength(Stiffness,count);
        Mechanism[count-1]:=StrToFloat(Edit1.Text);
        Abscissa[count-1]:=StrToFloat(Edit2.Text);
        Ordinate[count-1]:=StrToFloat(Edit3.Text);
        VibroNum[count-1]:=StrToInt(Edit4.Text);
        Stiffness[count-1]:=StrToFloat(Edit5.Text);
        Path[count-1]:=Edit6.Text;
        if count=5 then begin
          ShowMessage('Граничное число элементов типа Механизм');
          SpeedButton3.Enabled:=False;
        end;
        Edit1.Enabled:=False;
        Edit2.Enabled:=False;
        Edit3.Enabled:=False;
        Edit4.Enabled:=False;
        Edit5.Enabled:=False;
        Edit6.Enabled:=False;
        SpeedButton5.Enabled:=False;
        SpeedButton6.Enabled:=False;
        SpeedButton3.Enabled:=True;
        SpeedButton8.Enabled:=False;
        count:=t-tt;
        Label7.Caption:=IntToStr(t);
        Vib.Label5.Caption:=Label7.Caption;
        for i:=count-1 to count-1 do
          Vib.Label7.Caption:=FloatToStr(StrToFloat(Vib.Label7.Caption)+VibroNum[i]);
        if count>=2 then begin
          SpeedButton1.Enabled:=True;
          SpeedButton4.Enabled:=True;
        end;
      end
      else ShowMessage('Параметры введены некорректно');
    end;
  end;
end;
LLIALLIJIbIK вне форума Ответить с цитированием
Старый 02.07.2013, 23:29   #10
iworm2009
Пользователь
 
Регистрация: 07.05.2013
Сообщений: 51
По умолчанию

у вас не выставляется SetLength для указанных массивов если count больше 2-х
iworm2009 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка access violation LLIALLIJIbIK Общие вопросы Delphi 9 21.04.2013 15:56
Ошибка: Access violation at Address Marina) Общие вопросы Delphi 15 20.12.2011 02:11
Ошибка Access violation... ара Общие вопросы Delphi 2 15.05.2011 15:57
Ошибка access violation at adress Godod Помощь студентам 2 02.02.2011 11:11
Ошибка Access Violation AHTuKiLLeR Общие вопросы Delphi 8 02.06.2009 10:48