Dynamic memory allocation

Dynamic memory allocation

How do you dynamically allocate memory for a two-dimensional array? This is what I had, and my g++ compiler didn’t like it:

int **m;m= new int [100][100];

Yep. The following signifies a pointer to a pointer to an integer.

int **m;

A two-dimensional array is something very different. One problem is the way the compiler computes the address based on the value of the two array subscripts. To compute this address, the code multiplies the column subscript by the size of the data type. But it must multiply the row subscript by the size of the data type times the number of columns.

If the variable is declared simply as a pointer to a pointer, the compiler has no way to know how many columns there are in each row. So you must specify the number of columns in your declaration.

 int (*m)[100]; m = new int[100][100];
The parenthases are required to distinguish the declaration from an array of 100 pointers to integers. Now you can declare your two-dimensional array, and the compiler won’t complain because it knows how many columns for each row.


Share the Post: