Dynamic Memory Allocation for Two Dimensional Arrays in C++
August 3, 2010 at 3:39 pm 7 comments
In C++, a two-dimensional array can be declared simply like this
int a[10][20];
However, this declaration requires contanst array size and it is inconvenient when the array size vary. To avoid this issue, you can use dynamic two dimensional array. There are several ways to allocate a dynamic two-dimensional array in C++. In this post, I will show you three most frequent methods.
First one is flattening the two dimensional array into one dimensional array and using it as one dimensional array
//Allocate
int *a = new int[m*n];
//Use a[m][n]
for( int i = 0 ; i < m ; i++)
for ( int j = 0 ; j < n ; j++)
a[i*n + j] = 1;
//Deallocate
delete[] a;
Second method is using an array of dynamic one-dimensional arrays. It makes use of dynamic 2D array be easier. However, elements of array may not be continuous in memory
int **a = new int*[m];
for ( int i = 0 ; i < m ; i++)
a[i] = new int[n];
for ( int i = 0 ; i < m ; i++)
for ( int j = 0 ; j < n ; j++)
a[i][j] = 1;
for ( int i = 0 ; i < m ; i++) delete[] a[i];
delete[] a;
//Allocate
int **a = new int*[m];
int a[0] = new int[m*n];
for ( int i = 1 ; i < m ; i++) a[i] = a[i-1] + n;
//Use a[m][n]
for ( int i = 0 ; i < m ; i++)
for ( int j = 0 ; j < n ; j++)
a[i][j] = 1;
delete[] a[0];
delete[] a;
Entry filed under: C++ Programming. Tags: C++, Dynamic, Dynamic Memory Allocation, how to "new" a two-dimension array in C++, Memory Allocation, new, two dimension array.
1.
steve richards | April 25, 2012 at 6:12 am
I tried to compile the third case with g++ and I got the following errors:
error: array must be initialized with a brace-enclosed initializer
error: invalid types ‘int[int]’ for array subscript
error: type ‘int’ argument given to ‘delete’, expected pointer
Which compiler did you use?
2.
steve richards | April 25, 2012 at 6:30 am
I just realized that the “int” before a[0] is causing the errors….
Would it also be possible to access the elements of ‘a’ using a single index? I.e. a[0] … a[i] … a[m*n-1]?
3.
VELAYUTHAM T | July 2, 2012 at 7:33 pm
I tried your first approach but its failed to retrieve a 4*5 matrix. Then i realized we must change the code to
for ( int i = 0 ; i < m ; i++)
for ( int j = 0 ; j < n ; j++)
a[i*n + j] = 1;
can you verify this?
4.
lanvu | July 3, 2012 at 9:57 am
You are right. I just updated ! Thanks .
5.
VELAYUTHAM T | July 3, 2012 at 7:00 pm
Thanks lot for you..
6.
Sainath | July 12, 2012 at 12:13 am
How do we initialize dynamic arrays in C.??
If we initialize an array as arr[][], it is showing an error.
Again if we given the array size as arr[m][n] , it is also showing an error.. please help to solve this prob.
7.
VELAYUTHAM T | July 12, 2012 at 5:34 am
you have to allocate memory using malloc function..