1

Тема: Динамічний масив, індекс виходить за границі массива

Type
    TwoCoord=record
      x1,y1,x2,y2:integer;
      enabled:boolean;
     end;

var 

    i,j,k  :integer;

     check: real;

    x,y,d: array of integer;

    LinesMas: array of TwoCoord;

    MasBord: array of integer; {all lines left to coord}

    Bot_Border, Top_Border,
    Left_Border, Right_Border: array of integer;
    TSort: integer;
 
    .....

     setlength(Bot_Border,3);
     k:=3;
     Bot_Border[1]:=0;
     Bot_Border[2]:=n;
     for i:=1 to (length(LinesMas)-1) do
       begin
          if LinesMas[i].y1=0 then
            begin
              SetLength(Bot_Border, Length(Bot_Border)+1);
              Bot_Border[k]:=LinesMas[i].x1;
              inc(k);
            end;
          if LinesMas[i].y2=0 then
            begin
              SetLength(Bot_Border, Length(Bot_Border)+1);
              Bot_Border[k]:=LinesMas[i].x2;
              inc(k);
            end;
       end;
     for i:=1 to (length(Bot_Border)-1) do
       for j:=1 to (length(Bot_Border)-i) do
          if Bot_Border[j]>Bot_Border[j+1] then
              begin
               TSort:=Bot_Border[j];
               Bot_Border[j]:=Bot_Border[j+1];
               Bot_Border[j+1]:=TSort;
              end;

на цьому рядку
  if Bot_Border[j]>Bot_Border[j+1]
видає помилку, що індекс виходить за границі массива

2

Re: Динамічний масив, індекс виходить за границі массива

for i:=1 to (length(Bot_Border)-2) do

Подякували: koala1

3

Re: Динамічний масив, індекс виходить за границі массива

далі те саме

4 Востаннє редагувалося Chemist-i (26.02.2014 20:59:33)

Re: Динамічний масив, індекс виходить за границі массива

Ну тоді самі подивіться, динамічний масив має індексацію від 0 (DynamicArray[0] - то є перший елемент) до Length(DynamicArray)-1 - (DynamicArray[ Length(DynamicArray)-1 ] - то є останній елемент). Все уважно перевірте, і якшо проблеми залишаться - відпишіть.

Подякували: fer123, Torbins, koala3

5

Re: Динамічний масив, індекс виходить за границі массива

поправив,
for i:=1 to (length(Bot_Border)-1) do
   for j:=1 to (length(Bot_Border)-i-1) do

6

Re: Динамічний масив, індекс виходить за границі массива

Не хочу детально розбирати код, але, може, від 0 поставите?

for i:=0 to (length(Bot_Border)-1) do
   for j:=0 to (length(Bot_Border)-i-1) do

7

Re: Динамічний масив, індекс виходить за границі массива

я розмір масива на 1 збільшив, щоб було зручніше індексувати з 1

8

Re: Динамічний масив, індекс виходить за границі массива

fer123 написав:

я розмір масива на 1 збільшив, щоб було зручніше індексувати з 1

Кажуть, зручніше індексувати з нуля...