Solved

Dynamic 2-dimensional array

Posted on 2003-10-30
7
487 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
Comment
Question by:reidy_boy
7 Comments
 
LVL 14

Accepted Solution

by:
Farzad Akbarnejad earned 50 total points
ID: 9652130
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

by:Farzad Akbarnejad
ID: 9652143
Hello,
Sorry change

MyVariable2 = new unsigned int * [8];

with

MyVariable2 = new unsigned int * [12];

-FA
0
 
LVL 10

Expert Comment

by:Sys_Prog
ID: 9652262
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
Courses: Start Training Online With Pros, Today

Brush up on the basics or master the advanced techniques required to earn essential industry certifications, with Courses. Enroll in a course and start learning today. Training topics range from Android App Dev to the Xen Virtualization Platform.

 
LVL 30

Expert Comment

by:Axter
ID: 9654864
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

by:Axter
ID: 9654882
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

by:efn
ID: 9655746
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

by:reidy_boy
ID: 9656684
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

Featured Post

Live: Real-Time Solutions, Start Here

Receive instant 1:1 support from technology experts, using our real-time conversation and whiteboard interface. Your first 5 minutes are always free.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction This article is the first in a series of articles about the C/C++ Visual Studio Express debugger.  It provides a quick start guide in using the debugger. Part 2 focuses on additional topics in breakpoints.  Lastly, Part 3 focuses on th…
Introduction This article is a continuation of the C/C++ Visual Studio Express debugger series. Part 1 provided a quick start guide in using the debugger. Part 2 focused on additional topics in breakpoints. As your assignments become a little more …
The viewer will learn how to use the return statement in functions in C++. The video will also teach the user how to pass data to a function and have the function return data back for further processing.
The viewer will be introduced to the member functions push_back and pop_back of the vector class. The video will teach the difference between the two as well as how to use each one along with its functionality.

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

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

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

9 Experts available now in Live!

Get 1:1 Help Now