Basically I want to set up a 3-dimensional array, but I want to dynamically allocate memory for it.

Say I read 3 variables from a file, all ints:
f, s, and v.
i want to allocate memory for
array[f][s][v]

array is part of a struct

How would I go about doing this?

I did search google, but only came up with solutions for 1D arrays

Recommended Answers

All 3 Replies

This is how I would do it, but there might be other ways.

int main()
{
    int ***arry;
    int f = 2, s = 3, v = 5;

    arry = new int**[f];
    for(int i = 0; i < f; i++)
    {
        arry[i] = new int*[s];
        for(int j = 0; j < s; j++)
        {
            arry[i][j] = new int[v];
        }
    }
}

Ok, thank you very very much. That was what I needed to know. I don't like the nested for loops, but it will work.

or you can just allocate a single block of memory and use some ugly dereference macros

#define deref(I,J,K) [I*s*v+J*v+K]
int *arry = new int[f*s*v];

arry deref(i,j,k) = 8;    // assign some value

cout << arry deref(m,n,o) << endl;  // read back some value

delete[] arry;

while the macro may not be the nicest solution, I prefer having all data for my array in the same contiguous block. It makes e.g. saving it to disk, or copying it in memory much easier. The clean up using a single delete[] is also preferable for me.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.