Solved

# Dynamic 2-dimensional array

Posted on 2003-10-30
485 Views
Last Modified: 2010-04-01
I am trying to declare a 2-dimensional array at runtime.  I can declare a 1 dimensional array as follows:

unsigned int * MyVariable;
MyVariable = new unsigned int[12];

However, the following does not work.

unsigned int * MyVariable;
MyVariable = new unsigned int[12][8];

I am using Microsoft Visual C++ 6.0 if it is of any help.

If it is an overloading solution some code would be useful.

Many thanks in advance.
0
Question by:reidy_boy
7 Comments

LVL 14

Accepted Solution

Farzad Akbarnejad earned 50 total points
Hi,

unsigned int * MyVariable1;
MyVariable1 = new unsigned int[12];

// ------------------------------------------

unsigned int ** MyVariable2;
MyVariable2 = new unsigned int * [8];
for (int i = 0; i < 11; i++)
MyVariable2[i] = new unsigned int [8];

-FA
0

LVL 14

Expert Comment

Hello,
Sorry change

MyVariable2 = new unsigned int * [8];

with

MyVariable2 = new unsigned int * [12];

-FA
0

LVL 10

Expert Comment

int **a ;

a = new int * [10] ;
for ( int i = 0 ; i < 10 ; i ++ )
a [i] = new int [20] ;

This would get a array same as
a[10][20]

0

LVL 30

Expert Comment

You can use the following class to dynamically create a 2 dimensional array:

template < class T, int ROW_T = 0, int COL_T = 0 >
class dynamic_2d_array
{
public:
dynamic_2d_array(int row, int col):m_row(row),m_col(col), m_data((row!=0&&col!=0)?new T[row*col]:NULL){}
dynamic_2d_array():m_row(ROW_T),m_col(COL_T), m_data(new T[ROW_T*COL_T])
{if (!COL_T || !ROW_T) {int x[ROW_T] = {{ROW_T}};int y[COL_T] = {{x[0]}};}}
~dynamic_2d_array(){if(m_data) delete []m_data;}
T* operator[](int i) {return (m_data + (m_col*i));}
T const*const operator[](int i) const {return (m_data + (m_col*i));}
private:
const int m_row;
const int m_col;
T* m_data;
};
0

LVL 30

Expert Comment

Example usuage:
dynamic_2d_array < int > dyn_2dArray(Q_Col, Q_Row);
StartTime = GetTickCount();
for (int t = 0;t < QtyTestItera;++t)
for(int i0 = 0;i0 < Q_Col;++i0)
{
for(int i1 = 0;i1 < Q_Row;++i1)
{
dyn_2dArray[i0][i1] = i0 + i1;
}
}

Check out following link for more details on other methods for creating a dynamic two dimensional array:
http://www.axter.com/faq/topic.asp?TOPIC_ID=60&FORUM_ID=4&CAT_ID=9
0

LVL 15

Expert Comment

When you allocate an array of objects of some type T, you get a pointer to T.  With

new unsigned int[12][8]

you are allocating an array of 8-integer arrays, so you get a pointer to an 8-integer array, which is not the same as a pointer to an integer.  So all you have to do is declare MyVariable like this:

unsigned int (* MyVariable)[8];

The parentheses are necessary to get a pointer to an array, rather than an array of pointers.

This only works if the 8 is a constant, as shown in your question.  If it's a variable, see the other answers.

--efn
0

LVL 1

Author Comment

Thank you experts for your comments.  All are good answers, but I have given the points to FarzadA because it was the simplest.  Sys_Prog, your answer was along the same lines as FarzadA but he got there first!!!
0

## Join & Write a Comment Already a member? Login.

This article's goal is to present you with an easy to use XML wrapper for C++ and also present some interesting techniques that you might use with MS C++. The reason I built this class is to ease the pain of using XML files with C++, since there is…
This article shows you how to optimize memory allocations in C++ using placement new. Applicable especially to usecases dealing with creation of large number of objects. A brief on problem: Lets take example problem for simplicity: - I have a G…
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.

#### 763 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

#### Need Help in Real-Time?

Connect with top rated Experts

6 Experts available now in Live!