Board index » delphi » Delphi - Dynamic 2-dimensional arrays

Delphi - Dynamic 2-dimensional arrays

Is it true that Delphi will not allow dynamic 2-dimensional arrays?  I f so,
then what do you do in this case?  Can you set 1 dimension as fixed and make
the other dynamic?

I've tried the 2-dimensional dynamic and it doesn't work.  If anyone has
experience in this problem and has a suggestion I'd be most appreciative.

Thanks in advance for your help.

Steve Kammerer

 

Re:Delphi - Dynamic 2-dimensional arrays


In article <zsol.7.00866...@mindspring.com>, z...@mindspring.com says...

Quote

>Is it true that Delphi will not allow dynamic 2-dimensional arrays?  I f so,
>then what do you do in this case?  Can you set 1 dimension as fixed and make
>the other dynamic?

>I've tried the 2-dimensional dynamic and it doesn't work.  If anyone has
>experience in this problem and has a suggestion I'd be most appreciative.

well the problem is:

if you have an
  test : array[0..0] of longint;
lets say, and you allocate lets say $4000 bytes, the compiler has no trouble converting  
  test[$200] to a pointer $800 bytes into the array, coz he knows a longint is 4 bytes of
size.

however, if you have
  test : array[0..0,0..0] of longint;
the same can't work, because this is in fact identical to
  test : array[0..0] of array[0..0] of longint;
so you have an array of arrays, not of longints. and if the compiler does not know what size
the inner array has (the array of longint), he cannot access a certain value in the outer
array (array of array)

so therefor there are no two- (or more-) dimensional arrays that are dynamic in any dimension
other then the outermost. never will be, either. it's a no-go.

you CAN of course make a
  test : array[0..0,0..$3f] of longint;
coz this equals
  test : array[0..0] of array[0..$3f] of longint;
and array[0..$3f] of longint has a fixed size of $100.

now...how do we work around this?

easy. we just make one huge array (huge of course being relative as long as Delphi95 isn't out
:), and keep width as an constant.

so if you want to access test[x,y] you do this with
  test[x+width*y];
assuming y is starting at 0.

thanx for your attention
marc

Other Threads