Головна сторінка
Top.Mail.Ru Яндекс.Метрика
Форум: "Основна";
Поточний архів: 2002.12.23;
Завантажити: [xml.tar.bz2];

Вниз

динамічні масиви Знайти схожі гілки


WCM   (2002-12-12 02:13) [0]

Господа!
Є така проблема.
1. При выполнении функции
Finalize(Radius);
возникает исключение.
При этом Radius - динамический массив не пустой.
2. Такая же ситуация при определении длины нового массива (с другим именем) в первый раз
SetLength(Name); - Access violation.

Подскажите, плз, как это пофиксить.

Заздалегідь вдячний.



Separator   (2002-12-12 06:50) [1]


type
TAr = array of integer;

var
A: TAr;

begin
SetLength(A, 20);
A[3]:= 1;
A[6]:= 5;
Finalize(A);
end;


Все працює



WCM   (2002-12-14 00:38) [2]

unit uExpert;

інтерфейс

uses Order, Math, Windows, Forms, Arr_of_L, SysUtils, Graphics, Messages,
Classes, Controls, Dialogs, StdCtrls, ExtCtrls, ComCtrls, Grids;

було
L_matrix : array of array of real; // матрица расстояний между НК
Radius : array of real; // массив ра между НК
n : integer; // число радиусов
cluster : array of integer; // массив числа кластеров
Clusters : array of array of integer; // матрица числа кластеров и содержащихся в них НК
Clust_R : array of array of real; // матрица радиусов и соответствующих им числа кластеров
n_clust : integer; // число кластеров
k_cel_cl : array of integer; // массив числа НК в каждом кластере
Sender : TObject; // вспомогательная переменная класса TObject для очистки экрана
num_cl : array of array of integer;

procedure ShortestPath(n_cel: integer; var Radius: array of real);
var i,j,k,l,
Xcl,Zcl: integer;
R: real;
починати
k: = 0;
l: = 0;
{ разворачивание Image2 до размеров экрана }
fmOrder.Image2.Transparent := True;
fmOrder.Image2.Align := alClient;
fmOrder.Image2.Canvas.Pen.Color := clBlue;
for j := 0 to n_cel-1 do
починати
{ установка большого радиуса }
R := 1.0e+12;
{ вычисление к-т следующего СВЦ }
l := l+1;
if l <> 1 then
починати
Xcl := 0; Zcl := 0;
l: = 0;
for i := 1 to n_cel do
if Ship[i].Flag = True then
починати
Xcl := Xcl+Ship[i].Xt^;
Zcl := Zcl+Ship[i].Yt^;
l := l+1;
end;
кінець
ще
починати
Xcl := Ship[j+1].Xt^;
Zcl := Ship[j+1].Yt^;
Ship[j+1].Flag := True;
k: = 1;
end;
Xcl := Xcl div l;
Zcl := Zcl div l;
{ рисование СВЦ }
with fmOrder.Image2.Canvas do
починати
Pen.Color: = clRed;
Ellipse(Ceil(Xcl-3),Ceil(Zcl-3),Ceil(Xcl+3),Ceil(Zcl+3));
Pen.Color := clBlue;
end;
{ расчет растояния до ближайшей точки }
for i := 1 to n_cel do
if Ship[i].Flag <> True then
починати
Order.Range(Xcl,Zcl,Ship[i].Xt^,Ship[i].Yt^);
if Length < R then
починати
R := Length;
l := i;
end;
end;
Xcl := Ship[l].Xt^;
Zcl := Ship[l].Yt^;
{ расчет растояния до ближайшей точки из уже рассмотренных }
for i := 1 to n_cel do
if Ship[i].Flag = True then
починати
Order.Range(Xcl,Zcl,Ship[i].Xt^,Ship[i].Yt^);
if Length < R then
починати
R := Length;
k: = i;
end;
end;
Radius[j] := R;
{ Установка флага ближайшего НК в True }
Ship[l].Flag := True;
with fmOrder.Image2.Canvas do
починати
MoveTo(Ship[k].Xt^,Ship[k].Yt^);
LineTo(Xcl,Zcl);
end;
Application.ProcessMessages;
Sleep (300);
end;
fmOrder.Image2.Canvas.Pen.Color := clDefault;
Application.ProcessMessages;
Sleep (1000);
end;

procedure Clust(n_cel: integer);
var k,j,s,l,cl_max: integer;
R: real; // текущий радиус
X_cl,Z_cl: array of integer; // массив центров кластеров
починати
SetLength(X_cl,n_cel);
SetLength(Z_cl,n_cel);
SetLength(k_cel_cl,n_cel);
SetLength(cluster,n);
SetLength(Clust_R,n,2);
{ установка всех влагов в 0 }
Zero_FLag(n_cel);
{ вычисление кластеров }
for j: = 0 to n-1 do
починати
R := Radius[j];
Forel(i,R,X_cl,Z_cl);
cluster[j] := n_clust;
Clust_R[j,0] := R;
Clust_R[j,1] := n_clust;
{ очистка экрана }
fmOrder.Button1Click(Sender);
{ установка всех влагов в 0 }
Zero_FLag(n_cel);
end;

i := n_cel;
Finalize(X_cl);
Finalize(Z_cl);
Finalize(k_cel_cl);

Finalize(cluster);
Finalize(num_cl);
Finalize(Clust_R);
Finalize(Radius); <-- Вот тут сбой!!!

end;



Anatoly Podgoretsky   (2002-12-14 00:49) [3]

Не видать инициализации массива Radius, зато есть обращение к неинициализированному массиву



Anatoly Podgoretsky   (2002-12-14 00:50) [4]

Да и включи ты накоенец проверку диапазона в компиляторе, поскольку пишешь с ошбиками диапазона.



WCM   (2002-12-14 00:59) [5]

Да инициализирую я его в другой процедуре, просто здесь приводить не стал.
Я же привел расчет... Нормально в него пишу. Просто именно при этой операции сбой происходит (при других нет) и еще, если это закоментировать сбой программы происходит при выходе (закрытии главной формы).



сторінки: 1 вся гілка

Форум: "Основна";
Поточний архів: 2002.12.23;
Завантажити: [xml.tar.bz2];

Вгору





Пам'ять: 0.57 MB
Час: 0.029 c
1-74736
Strumpf
2002-12-14 00:09
2002.12.23
Пропадає системне меню дочірнього вікна MDI-форми: ((


14-74978
3d [Power]
2002-12-03 14:32
2002.12.23
--- | Гілка була без назви | ---


1-74632
Gayrus
2002-12-12 06:13
2002.12.23
Запуск EXE з EXE


1-74750
Джон
2002-12-14 22:05
2002.12.23
Прозорий textout?


1-74787
Zirus
2002-12-11 12:09
2002.12.23
Р Р ° Р ± РѕС,Р ° СЃ РїР ° РјСЏС,СЊСЋ





африкаанс албанський арабська вірменин азербайджанець баскський білоруський болгарська каталонський Китайська (спрощене письмо) Китайський традиційний) хорватський чеська данську мову нідерландський Ukranian естонець Філіппінська фінську мову французький
галісійська грузинський німецький грецький гаїтянський креольський давньоєврейську хінді угорський ісландський індонезієць ірландський італійський японський корейський латиська литовець македонець малайський мальтійський норвежець
перс полірування португальська румунський російська сербський словацький словенський іспанська суахілі шведську мову тайський турецька український урду в'єтнамський валлійський ідиш бенгальський боснійський
кебуано есперанто гуджараті хауса хмонг ігбо яванський каннада кхмерская Лао латинь маорі маратхі монгольський непальська панджабі сомалійський тамільська телугу йоруба
зулуський
Англійська Французький Німецький Італійський Португальська Русский Іспанська