dynamic allocation of multidimensional array

I am trying to allocate memory for a 2 dimensional array of size declared by the user but am not quite sure how to do this. I read several forums about it to generate the code I have so far but am getting errors about have invalid types int[int] for array subscript. Any help would be appreciated THANKS.

Code:

`#include <iostream>`

#include <vector>

using namespace std;

void MagicSquare ( int ptr, int n );

void DisplaySquare ( int ptr, int n );

int main(void)

{

int order, **ptr;

cout <<"This program will create a magic square of an odd order\n";

cout <<"Please enter the order number you would like:\n";

cin >> order;

ptr = new int *[order]; //allocates a new array of pointers to int type

for(int i=0; i<order; ++i)

ptr[i]=new int[order]; //allocates space for each pointer making second dimension

if (order%2==1)

MagicSquare( **ptr, order );

else{

delete []ptr;

cout <<"order cannot be even\n";

}

DisplaySquare( **ptr, order );

}

void MagicSquare ( int ptr, int n )

{

int max = n * n;

int i=0;

int j=n/2; // start position

for (int k=1; k<=max; ++k)

{

ptr[i][j]= k;

i--;

j++;

if (k%n == 0)

{

i += 2;

--j;

}

else

{

if (j==n)

j -= n;

else if (i<0)

i += n;

}

}

}

void DisplaySquare( int ptr, int n)

{

for (int i=0; i<n; i++)

{

for (int j=0; j<n; j++)

cout << ptr[i][j] << "\t";

cout << "\n\n\n\n";

}

}