Related Articles
How to declare a 2D array dynamically in C++ using new operator
• Difficulty Level : Medium
• Last Updated : 13 Apr, 2021

Prerequisite: Array Basics
In C/C++, multidimensional arrays in simple words as an array of arrays. Data in multidimensional arrays are stored in tabular form (in row major order). Below is the general form of declaring N-dimensional arrays:

Syntax of a Multidimensional Array:

data_type array_name[size1][size2]….[sizeN];

data_type: Type of data to be stored in the array.
Here data_type is valid C/C++ data type
array_name: Name of the array
size1, size2, …, sizeN: Sizes of the dimensions

2D arrays are arrays of single-dimensional arrays.

Syntax of a 2D array:

data_type array_name[x][y];
data_type: Type of data to be stored. Valid C/C++ data type.

Below is the diagrammatic representation of 2D arrays:

For more details on multidimensional and 2D arrays, please refer to Multidimensional arrays in C++ article.

Problem: Given a 2D array, the task is to dynamically allocate memory for a 2D array using new in C++.

Solution: Following 2D array is declared with 3 rows and 4 columns with the following values:

```1 2 3 4
5 6 7 8
9 10 11 12```

Note: Here M is the number of rows and N is the number of columns.

Method 1: using a single pointer – In this method, a memory block of size M*N is allocated and then the memory blocks are accessed using pointer arithmetic. Below is the program for the same:

C++

 `// C++ program to dynamically allocate``// the memory for 2D array in C++``// using new operator``#include ``using` `namespace` `std;` `// Driver Code``int` `main()``{``    ``// Dimensions of the 2D array``    ``int` `m = 3, n = 4, c = 0;` `    ``// Declare a memory block of``    ``// size m*n``    ``int``* arr = ``new` `int``[m * n];` `    ``// Traverse the 2D array``    ``for` `(``int` `i = 0; i < m; i++) {``        ``for` `(``int` `j = 0; j < n; j++) {` `            ``// Assign values to``            ``// the memory block``            ``*(arr + i * n + j) = ++c;``        ``}``    ``}` `    ``// Traverse the 2D array``    ``for` `(``int` `i = 0; i < m; i++) {``        ``for` `(``int` `j = 0; j < n; j++) {` `            ``// Print values of the``            ``// memory block``            ``cout << *(arr + i * n + j)``                 ``<< ``" "``;``        ``}``        ``cout << endl;``    ``}``  ` `      ``//Delete the array created``      ``delete``[] arr;` `    ``return` `0;``}`

Output:
```1 2 3 4
5 6 7 8
9 10 11 12```

Method 2: using an array of pointer: Here an array of pointers is created and then to each memory block. Below is the diagram to illustrate the concept:

Below is the program for the same:

C++

 `// C++ program to dynamically allocate``// the memory for 3D array in C++``// using new operator``#include ``using` `namespace` `std;` `// Driver Code``int` `main()``{``    ``// Dimensions of the array``    ``int` `m = 3, n = 4, c = 0;` `    ``// Declare memory block of size M``    ``int``** a = ``new` `int``*[m];` `    ``for` `(``int` `i = 0; i < m; i++) {` `        ``// Declare a memory block``        ``// of size n``        ``a[i] = ``new` `int``[n];``    ``}` `    ``// Traverse the 2D array``    ``for` `(``int` `i = 0; i < m; i++) {``        ``for` `(``int` `j = 0; j < n; j++) {` `            ``// Assign values to the``            ``// memory blocks created``            ``a[i][j] = ++c;``        ``}``    ``}` `    ``// Traverse the 2D array``    ``for` `(``int` `i = 0; i < m; i++) {``        ``for` `(``int` `j = 0; j < n; j++) {` `            ``// Print the values of``            ``// memory blocks created``            ``cout << a[i][j] << ``" "``;``        ``}``        ``cout << endl;``    ``}``  ` `      ``//Delete the array created``      ``for``(``int` `i=0;i

Output:
```1 2 3 4
5 6 7 8
9 10 11 12```

Want to learn from the best curated videos and practice problems, check out the C++ Foundation Course for Basic to Advanced C++ and C++ STL Course for foundation plus STL.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.
My Personal Notes arrow_drop_up