powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Inaccessible value, нет доступа к элементу.
13 сообщений из 13, страница 1 из 1
Inaccessible value, нет доступа к элементу.
    #39645076
В общем я понимаю, что где-то накосячил, но не могу понять где.
Код: 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
Inaccessible value, нет доступа к элементу.
    #39645077
Чего-то картинки не так загрузил...

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

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

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

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

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

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

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

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

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

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


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