Question:
How can I dynamically declare a 2D array and pass it as a parameter to a function?Here’s an example of what I’m trying to do:
#includeHere are the error codes I get:#include #include const SIZE = 50;void display (float myArray[][]){ for (int i = 0; i < 50; i++) for (int j = 0; j< 50; j++) cout << myArray[i][j] << ' ';}void main(){ float *myArray; myArray = new float[SIZE][SIZE]; for (int i = 0; i < 50; i++) for (int j = 0; j < 50; j++) myArray[i][j] = 9.9; display(myArray); }
cd /a/home/ce/ugrad/stinson/cs/354/temp/g++ -g array.cc -o array -lmarray.cc:8: pointer or reference to array of unknown bound in parm typearray.cc: In function `void display(float (*)[])’:array.cc:11: invalid use of array with unspecified boundsarray.cc: In function `int main(…)’:array.cc:18: assignment to `float *’ from `float (*)[50]’array.cc:22: invalid types `float[int]’ for array subscriptarray.cc:24: passing `float *’ as argument 1 of `display(float (*)[])’Compilation exited abnormally with code 1 at Thu Apr 17 10:13:41
Answer:
When using the array syntax, the compiler must always know the size of thearray that is being used; hence the error.The way to solve it is to define the display method as
void display (float myArray[][SIZE]);or
void display (float **myArray);Also, remember the display function must somehow be able to know howmany items were actually allocated in both cases.
In main()
you are also assigining the return value from new float [SIZE][SIZE]
to a float *
this is an erroryou should make the type of myArray
to float **
to correct this error.