Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.21;
Скачать: CL | DM;

Вниз

Как передать в функцию как параметр двумерный динамический массив   Найти похожие ветки 

 
Faustov   (2002-11-10 17:54) [0]

Как передать в функцию как параметр двумерный динамический массив?
Делал так
type Matr = array of array of real
...
function Func(var A,B: matr): boolean;
...
При вызове функции выдает ошибку Invalid Pointer


 
MBo ©   (2002-11-10 17:57) [1]

a как объявлены a и B и сделано ли SetLength?


 
Faustov   (2002-11-10 18:39) [2]

2MBo

procedure TForm8.Button1Click(Sender: TObject);
var a,b: Matr;
i,j:integer;
begin
SetLength(a,N,N);
SetLength(a,N,N);
...
Func(a,b);
end;


 
Faustov   (2002-11-10 18:41) [3]

пардон, опечатался, вот так:

procedure TForm8.Button1Click(Sender: TObject);
var a,b: Matr;
i,j:integer;
begin
SetLength(a,N,N);
SetLength(b,N,N);
...
Func(a,b);
end;


 
Alex44   (2002-11-10 18:49) [4]

Ya dumayu, chto eto ochen" ne trivial"naya constructsiya.
Kogda Vy delaete SetLength(A, n), to ne ochevidno, chto vse elementy A[i] proinitializirovany, i kogda Vy delaete

for I := 0 to n-1 do SetLength(A[i], m);

mozhet vyskochit" access violation. Dazhe esli net, potom, pered SetLength(A, NewN) Vam pridetsya snachala

for I := 0 to n-1 do SetLength(A[i], 0);

dlya osvobozhdeniya pamyati. Mozhet, ya ne prav i Delphi podderzhivaet mnogomernye dynamic arrays? Kto znaet?

V lyubom sluchae, eto nemnogo nadumano, t.k. lyuboj massiv v dushe odnomeren. Mozhno opredelit"


type Matr = record
m, n: Integer;
Entries: array of real;
end


a luchshe dazhe


type Matr = class
private
Fm, Vn: Integer;
FEntries: array of real;
...
public
property n: Integer read Fn write SetN;
...
property Entrie[i, j: Integer]: real read GetEntrie write SetEntrie; default;
end;

procedure Matr.SetN(Value: Integer);
begin
if Value <> Fn then begin
Fn := Value;
SetLength(FEntries, Fn*Fm);
end;
end;

function Matr.GetEntry(i, j: Integer): real;
begin
// if invalid values are possible, insert range check here
Result := FEntries[(i-1)*(Fm-1) + J-1];
end;


Nu, i ne zabyt" SetLength(FEntries, 0) v Matr.Destroy;


 
Faustov   (2002-11-10 19:02) [5]

Alex44 думаю, не в том проблема
Кто-нибудь использовал многомерный динамич. массив в качестве параметра функции???


 
wssg   (2002-11-10 19:18) [6]

2Faustov
>SetLength(a,N,N);
>SetLength(b,N,N);
У SetLength вроде всего два параметра...

И вот простой пример использования динамического двумерного массива:

...
TArr = array of array of integer;
...
procedure TForm1.FillArr(var ar: TArr);
var i,j:integer;
begin
for i:=Low(ar) to High(ar) do
for j:=Low(ar[i]) to High(ar[i]) do
ar[i,j]:=Random(1000);
end;

procedure TForm1.Button1Click(Sender: TObject);
var a:Tarr;
i,j:integer;
begin
SetLength(a,10);
for i:=Low(a) to High(a) do
SetLength(a[i],10);
FillArr(a);
for i:=Low(a) to High(a) do
for j:=LOw(a[i]) to High(a[i]) do
Memo1.Lines.Add(IntToStr(a[i,j])+" ");
end;


 
wssg   (2002-11-10 19:28) [7]

2Faustov
>SetLength(a,N,N);
>SetLength(b,N,N);

>У SetLength вроде всего два параметра...

Ошибся, SetLength(b,N,N); работает....

>При вызове функции выдает ошибку Invalid Pointer
А что в функции делается смотрели?


 
Fantasist ©   (2002-11-10 21:47) [8]

Динамический массив - это указатель, так что передавать его как var параметр большого смысла не имеет - в любом случае передается только указатель, а значит массив будет меняться в любом случае. Разве что ты там делаешь такие конструкции:

function f1(var a,b:TMatr):boolean;
begin
a:=b; //здесь
SetLength(a,7,7); //и здесь имеет значение есть ли модификатор var перед паметрами.
end;



function f1(a,b:TMatr):boolean;
begin
a[5,5]:=7; //здесь это значения не имеет. переданный массив измениться.
end;


 
Fantasist ©   (2002-11-10 21:52) [9]

Да совсем забыл.
Faustov : приведенный кусок кода ничего криминального не содержит. Покажи функцию.



Страницы: 1 вся ветка

Текущий архив: 2002.11.21;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
1-69380
The_Vizit0r!
2002-11-09 19:45
2002.11.21
Вопрос по Image


14-69574
Dimka Maslov
2002-11-01 16:42
2002.11.21
Delphi & MSVC++


1-69354
Monak
2002-11-06 20:51
2002.11.21
Буфер обмена


6-69467
Troll
2002-09-26 16:00
2002.11.21
Дело есть!


4-69625
fishca
2002-10-09 14:22
2002.11.21
Удаление файла