Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Inaccessible value, нет доступа к элементу. / 13 сообщений из 13, страница 1 из 1
15.05.2018, 15:42
    #39645076
Inaccessible value, нет доступа к элементу.
В общем я понимаю, что где-то накосячил, но не могу понять где.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
procedure TForm2.Button2Click(Sender: TObject);
var
N,M,i,j:integer;
Vmin,Vmax,Lmin,Lmax,x0,alf,kv,kl:real;
SortArray:array of TmpPoint;
NearestValues:array of array of TmpPoint;
  + Procedure SortBaseArrayByRo (Poz,Vol,x0,alf,kv,kl:real; nLine:integer; var TmpArr:array of TmpPoint);
  + Function RoMath (Poz,Vol,kl,kv:real;i,j:integer):real;
  + Function SumRoMath (Poz,Vol,x0,alf,kv,kl:real):real;
  + Function FPointMath (Poz,Vol,x0,alf,kv,kl:real):real;  
  + Procedure CreateSurfaceMath(N,M:integer; Vmin,Vmax,Lmin,LMax,x0,alf,kv,kl:real);
 
begin
   form2.Memo1.Lines.Add('___1___');
  CreateSurfaceMath (N,M,Vmin,VMax,Lmin,LMax,x0,alf,kv,kl);
   form2.Memo1.Lines.Add('___2___');

  Form3.Image1.Picture:=nil;
   Drawaxis;
   Drawpixel;
   Drawlines;
end;


Первый form2.Memo1.Lines.Add('___1___') пишет, на втором form2.Memo1.Lines.Add('___2___'); пишет "нет доступа по адресу" при прерывании выполнения в Делфе рисует:


Внутри процедур есть ещё процедуры, они последовательно вызывают друг друга, писать весь код бессмысленно: стыдно и много его очень.

По сути из процедуры Button2Click вызывается внутренняя процедура CreateSurfaceMath (проверка показал что оттуда доступ работает), из неё вызывается в цикле FPointMath ну и так далее (там есть ещё и внутренние процедуры, в общем много всего). Долгий поиск момента потери доступа показал, что доступ выпадает где-то в этой процедуре, при том даже не на первом или втором шаге, а фиг знает на каком.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
 Procedure SortBaseArrayByRo (Poz,Vol,x0,alf,kv,kl:real; nLine:integer; var TmpArr:array of TmpPoint);
    var
    //  TmpArr:array of TmpPoint;
     LTmpPoint:TmpPoint;
     j,k:integer;
    Function Ro (Poz,Vol,kl,kv:real;i,j:integer):real;
       begin
        Ro :=sqrt(sqr(BaseArr[i].Mass[j].Pos-Poz)*sqr(kl)+sqr(BaseArr[i].Mass[j].Vol-Vol)*sqr(kl));
       end;
    begin

      for j := 1 to BaseArr[nLine].Size do
        begin
          TmpArr[j].Pos  := BaseArr[nLine].Mass[j].Pos;
          TmpArr[j].Vol  := BaseArr[nLine].Mass[j].Vol;
          TmpArr[j].Force:= BaseArr[nLine].Mass[j].Force;
          TmpArr[j].Ro   := Ro (Poz,Vol,kl,kv,nLine,j);
        end;

     for j := 1 to 31 do
       for k := BaseArr[nLine].Size-j+1 downto 2 do
        begin
          if TmpArr[k].Ro<TmpArr[k-1].Ro then
            begin
             LTmpPoint.Ro:=TmpArr[k].Ro;
             TmpArr[k].Ro:=TmpArr[k-1].Ro;
             TmpArr[k-1].Ro:=LTmpPoint.Ro;

             LTmpPoint.Vol:=TmpArr[k].Vol;
             TmpArr[k].Vol:=TmpArr[k-1].Vol;
             TmpArr[k-1].Vol:=LTmpPoint.Vol;

             LTmpPoint.Force:=TmpArr[k].Force;
             TmpArr[k].Force:=TmpArr[k-1].Force;
             TmpArr[k-1].Force:=LTmpPoint.Force;

             LTmpPoint.Pos:=TmpArr[k].Pos;
             TmpArr[k].Pos:=TmpArr[k-1].Pos;
             TmpArr[k-1].Pos:=LTmpPoint.Pos;
            end;
        end;
      //  for j := 1 to BaseArr[nLine].Size do    form2.Memo1.Lines.Add(floattostr(TmpArr[j].Ro));
    end;



При том если не обращаться к элементам формы всё продолжает считаться и вполне себе досчитается до правильных результатов, но вот к некоторым элементам формы я уже обратится не могу, как быть и где искать ошибку... Может это что-то тривиальное?
...
Рейтинг: 0 / 0
15.05.2018, 15:43
    #39645077
Inaccessible value, нет доступа к элементу.
Чего-то картинки не так загрузил...

...
Рейтинг: 0 / 0
15.05.2018, 15:51
    #39645083
Inaccessible value, нет доступа к элементу.
И ошибка кстати выскакивает не по основному модулю а по:
...
Рейтинг: 0 / 0
15.05.2018, 15:53
    #39645085
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Inaccessible value, нет доступа к элементу.
Форма где-то удаляется?
...
Рейтинг: 0 / 0
15.05.2018, 15:58
    #39645089
Inaccessible value, нет доступа к элементу.
wadman,

Нет. Ничего не удаляется и не изменяется. Возможно я что-то намудрил с динамическими массивами, так как на определённом этапе всё работало, а потом хоп, ну вы понимаете ... :) . На этом этапе я как раз работал с массивами, попытка всё откатить проблему не решает, перезапуск делфи тоже. Понять бы хоть как отловить место ошибки, кода много...
...
Рейтинг: 0 / 0
15.05.2018, 16:01
    #39645091
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Inaccessible value, нет доступа к элементу.
Андрей Игоревич,

придется отладчиком научиться пользоваться. Выход за границы массивов - вполне себе обычная практика. :)

П.С. Массивы начинаются с 0.
Андрей Игоревич
Код: pascal
1.
for j := 1 to 31 do
...
Рейтинг: 0 / 0
15.05.2018, 16:01
    #39645092
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Inaccessible value, нет доступа к элементу.
Андрей Игоревич,

придется отладчиком научиться пользоваться. Выход за границы массивов - вполне себе обычная практика. :)

П.С. Массивы начинаются с 0.
Андрей Игоревич
Код: pascal
1.
for j := 1 to 31 do
...
Рейтинг: 0 / 0
15.05.2018, 16:02
    #39645093
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Inaccessible value, нет доступа к элементу.
Память где-то портится. FastMM + FullDebug поможет найти проблему.

Я бы начал отсюда
Андрей Игоревич
Код: pascal
1.
 for j := 1 to BaseArr[nLine].Size do

Вы уверены, что в BaseArr[nLine] индексация с 1, а не с 0?
...
Рейтинг: 0 / 0
15.05.2018, 16:07
    #39645099
Inaccessible value, нет доступа к элементу.
_Vasilisk_,wadman,

Аезде массивы начинаются с нуля, я это знаю и всегда даю им размер н+1, просто я не люблю использовать нулевой элемент, так как почти всегда за каждым расчетным элементом есть физический или графический смысл, где объекта с номером ноль не существует, ну и лень морочится разбираясь как динамический массив начинать с единицы, ну и нюансы по мелочи (хотя надо бы).
...
Рейтинг: 0 / 0
15.05.2018, 16:08
    #39645101
Inaccessible value, нет доступа к элементу.
Андрей Игоревич,
Ну и почему если я вылез за границы массива доступ к форме-то отваливается :).
...
Рейтинг: 0 / 0
15.05.2018, 16:16
    #39645105
Inaccessible value, нет доступа к элементу.
wadman,

В общем и правда вылез за границы массива. Но не потому, что неправильно их задал, а потому что забыл их задать :), и ведь работало до определённого момента. Хм... Спасибо.
...
Рейтинг: 0 / 0
15.05.2018, 16:17
    #39645106
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Inaccessible value, нет доступа к элементу.
Андрей ИгоревичНу и почему если я вылез за границы массива доступ к форме-то отваливается :).
Массав это область памяти, форма - аналогично.
...
Рейтинг: 0 / 0
15.05.2018, 17:42
    #39645155
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Inaccessible value, нет доступа к элементу.
Андрей ИгоревичНу и почему если я вылез за границы массива доступ к форме-то отваливается :).Почему, если выехать на бульдозере со строительной площадки, рушится, стоящий рядом, дом?
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Inaccessible value, нет доступа к элементу. / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]