Hogyan adja át a függvény paraméterként egy kétdimenziós dinamikus tömb

Hogyan adja át a függvény paraméterként egy kétdimenziós dinamikus tömb

Hogyan adja át a függvény paraméterként egy kétdimenziós dinamikus tömb?
Én ezzel
írja Matr = tömb tömb valós
.
funkció Func (var A, B: MATR): logikai;
.
Ha a függvény egy hibát érvénytelen Pointer

bejelentette a B és e SetLength tenni?

eljárás TForm8.Button1Click (Sender: TObject);
var a, b: Matr;
i, j: integer;
kezdődik
SetLength (a, N, N);
SetLength (a, N, N);
.
Func (a, b);
végén;

Sajnálom, zárt, így:

eljárás TForm8.Button1Click (Sender: TObject);
var a, b: Matr;
i, j: integer;
kezdődik
SetLength (a, N, N);
SetLength (b, N, N);
.
Func (a, b);
végén;

az I: = 0 és n-1 do SetLength (A [i], m);

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

az I: = 0 és n-1 do SetLength (A [i], 0);

dlya osvobozhdeniya pamyati. Mozhet, ya ne prav i Delphi podderzhivaet mnogomernye dinamikus tömböket? Kto znaet?

V lyubom sluchae, eto nemnogo nadumano, T. K. lyuboj masszív v dushe odnomeren. Mozhno opredelit "


írja Matr = rekord
m, n: egész;
Bejegyzés: tömb valódi;
vég

Egy luchshe dazhe


írja Matr = osztály
magán
Fm, Vn: integer;
FEntries: tömb valódi;
.
nyilvános
tulajdon n: Egész olvasni Fn írási SetN;
.
ingatlan Entrie [i, j: egész szám]: real olvasni GetEntrie írási SetEntrie; alapértelmezett;
végén;

eljárás Matr.SetN (Érték: Egész szám);
kezdődik
ha az érték <> Fn ezután kezdődik
Fn: = Érték;
SetLength (FEntries, Fn * Fm);
végén;
végén;

funkció Matr.GetEntry (i, j: Egész szám): a valós;
kezdődik
// ha érvénytelen érték lehetséges, helyezze tartomány ellenőrizze itt
Eredmény: = FEntries [(i-1) * (Fm-1) + J-1];
végén;

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

Alex44 nevű felhasználótól nem hiszem, hogy ez a probléma
Van valaki használt többdimenziós dinamikai. tömb, mint egy függvény paraméter.

2Faustov
> SetLength (a, N, N);
> SetLength (b, N, N);
A SetLength, mintha csak két paramétert.

És itt egy egyszerű példa a dinamikus kétdimenziós tömböt:

.
Tarr = tömb tömb egész szám;
.
eljárás TForm1.FillArr (var ar: Tarr);
var i, j: integer;
kezdődik
i: = Low (ar) Magas (ar) do
j: = Alacsony (ar [i]) magas (ar [i]) do
ar [i, j]: = Random (1000);
végén;

eljárás TForm1.Button1Click (Sender: TObject);
var a: Tarr;
i, j: integer;
kezdődik
SetLength (a, 10);
i: = Low (a) Magas (a) do
SetLength (a [i], 10);
FillArr (a);
i: = Low (a) Magas (a) do
j: = alacsony (a [i]), hogy nagy ([i]) do
Memo1.Lines.Add (IntToStr (a [i, j]) + "");
végén;

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

> A SetLength, mintha csak két paramétert.

Hiba, SetLength (b, N, N); Úgy működik.

> Ha a függvény egy hibát érvénytelen Pointer
És ez a funkció egy pillantást?

A dinamikus tömb - ez a mutató, így nem adja át a var paraméter sok értelme - minden esetben csak egy mutató vezetjük, ami azt jelenti, a tömb fog változni egyébként. Hogy csinálsz ilyen konstrukciók:

funkció f1 (var a, b: TMatr): logikai;
kezdődik
A: = B; // itt
SetLength (a, 7,7); // itt is fontos, ha van egy módosító előtt pametrami var.
végén;


függvény f1 (a, b: TMatr): logikai;
kezdődik
a [5,5]: = 7; // itt nem számít. által továbbított tömb változás.
végén;

Igen teljesen elfelejtettem.
Faustov. adott kódrészletet nem tartalmaz semmit, bűncselekmény. Itt található a funkciót.