dynamic array declration

i want to know if it is possible to declare an array of the type

int array[ length ]; where length is a variable.

i don't want to use malloc and calloc as they complicate the program.

i get an error message "Constant Expression Required"

is there any way of making the length constant so that the above statement is valid ??

i need this for a class called Timer

i want to declare it as

Timer T[5][length];
Where length is  a variable.

is it possible ??
( without using malloc and calloc as far as possible )

LVL 10
Who is Participating?
jkrConnect With a Mentor Commented:
>>i want to know if it is possible to declare an array of the type
>>int array[ length ]; where length is a variable.

Not if you are using VC++. You might want to use std::vector, e.g.

#include <vector>

std::vector<int> array(lenght);
Karl Heinz KremerCommented:
Your compiler tells you that it's not possible...

You are asking this in the C++ area, so why not just use a C++ feature? The STL vector is like an array, but it allocates it's memory dynamically in the background. This means that you don't have to take care of this yourself.

#include <vector>
using namespace std;

vector<Timer> T;

... then just use T like an array:
T[0] = ...
T[1] = ...
T[2] = ...

GJanuszConnect With a Mentor Commented:
I, too, would use vector.  How you use it is another matter, of course.  There are probably many ways.  Personally, working with a variable array of a constant array of class instances confuses me sometimes (hopefully not for the duration of this post).

I might consider coding it this way:

typedef struct {
      Timer      y[5];
} Timer5;
7 new features that'll make your work life better

It’s our mission to create a product that solves the huge challenges you face at work every day. In case you missed it, here are 7 delightful things we've added recently to monday to make it even more awesome.

And the rest of my post ... (note that the typedef struct could be a class instead if you like)

vector<Timer5> T;

Then you can reference Timer instances with references that look like:

In real life, I tend to run into situations more where I want to have a vector of vectors, in which case, I make my life simpler by defining something like this:

typedef vector<something> T_vSomething;

Then I can allocate a vector of a vector of somethings with:
vector<T_vSomething> myvv;
itsmeandnobodyelseConnect With a Mentor Commented:
The C++ equivalent of malloc is the new operator. You can do something like this:

class T
    char* ps;
    int  i;
    T() : ps(new char[10]), i(0) {}
    ~T() { delete [] ps; }

int main(int nArgs, char* szArgs[])

    typedef T T5[5];
    long len = 2;
    T5* pT5 = new T5[len];
    delete [] pT5;

    return 0;

Then you can have two dimensions - the first must be constant.

A dynamic container like vector is better, but vector<T> is an one-dimensional array.

Regards, Alex

heres a pretty simple solution here:

//first declare a pointer

int * array;

//then dynamically allocate the array like this:

array = new int[10][someVariable];

that should work
AxterConnect With a Mentor Commented:
>>array = new int[10][someVariable];

That works, but it leaves a potential for memory leaks just like malloc.

Here's another method:

With the simple class in the above link, you can easily declare a 2-D array like this:

dynamic_2d_array<Timer> T[5][length];

For more information, and to see other methods for dynamically creating a 2D array, see the following link:
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.