как создать трехмерный динамический массив - PullRequest
0 голосов
/ 19 марта 2012

Я хотел создать трехмерный массив в следующем коде, но я получил ошибку во время выполнения.

int dim1,dim2,dim3;
std::cout<<"dim one\n";
std::cin>>dim1;
std::cout<<"dim two\n";
std::cin>>dim2;
std::cout<<"dim three\n";
std::cin>>dim3;

int ***three_dim=0;
three_dim=new int**[dim1];
for(int i=0;i<dim1;++i)
    three_dim[i]=new int*[dim2];

for(int k=0;k<dim2;++k)
    three_dim[k]=new int*[dim3];
for(int k=0;k<dim1;++k)
for(int i=0;i<dim2;++i)
    for(int j=0;j<dim3;++j)
        three_dim[k][i][j]=0;

EDIT:

обязательно, чтобы я использовал трехмерный массив. Я создал двумерный массив с тем же стилем и хотел расширить его до трех, потому что это то, что мне нужно. Но, как вы видите, я запутался.

Спасибо Бо Перссон

Ответы [ 2 ]

2 голосов
/ 19 марта 2012

Эта часть

for(int k=0;k<dim2;++k)
    three_dim[k]=new int*[dim3];

имеет две проблемы. Одним из них является то, что выделяет int* вместо int. Другое, более серьезное, это то, что он перезаписывает ранее выделенные указатели из строк выше.

Вы, вероятно, должны сделать распределение следующим образом:

for(int i=0;i<dim1;++i)
{
    three_dim[i]=new int*[dim2];

    for(int k=0;k<dim2;++k)
        three_dim[i][k]=new int[dim3];
}
1 голос
/ 19 марта 2012

Подобные действия с указателями приведут вас к концу.

Самый простой способ сделать это, если вам действительно нужен трехмерный массив, - это использовать вложенные контейнеры STL.Т.е. std::vector<std::vector<std::vector<int>>>>.

Убедитесь, что вы решаете правильную задачу.Я не говорю, что это не так, но у меня просто интуитивное чувство, что вы могли бы решить эту проблему без трехмерного массива, с которым можно справиться, особенно если вам не нравятся указатели.

...