### Dynamic 2 Dimensional Array

Which is the correct way to create a Dynamic 2-Dimensional array?
 12345678 int **2d() { int **array= new int *[10]; array[0]=new int [100]; for(int i=0; i<10; i++) array[i]=array[0]+10*4*i; return array; }

or..
 12345678 int **2d() { int **array= new int *[10]; array[0]=new int [100]; for(int i=0; i<10; i++) array[i]=array[0]+10*4*i; //since (int) is 4 bytes across return array; }

I have no idea how to test the above arrays to see which one is correct.

I know that it is possible declare a 2D array like this...
 123456789 int **2d() { int **array= new int *[10]; array[0]=new int [100]; for(int i=0; i<10; i++) array[i]=array[0]+10*4*i; return array; }

however, i also know that calling "new" once for a chunk of memory is more efficient then calling new multiple times for small pieces of an array. I want to the code that is more efficient...
Last edited on
I do not see any difference between these three code snips.
Using such method of allocating an array you should not forget that you cannot delete [] a[i] except only when i = 0 that is when a[0] is used.
There really is no difference.
However, I haven't done pointer arithmetics in a while, but from what I remember from it, the '4' might be unnecessary and may cause errors. That is because the compiler 'knows' array[0] is a pointer to int, so it will increment by 'sizeof int' steps.
 from what I remember from it, the '4' might be unnecessary and may cause errors

This is correct. You must not multiply by 4. Pointer math is not done in bytes, it is done in 'elements' (ie: the compiler already multiplies by sizeof(int) for you)
Topic archived. No new replies allowed.