如何创建一个三维动态数组

时间:2012-03-19 17:22:25

标签: c++ arrays dynamic new-operator

我想在以下代码中创建一个三维数组,但我得到运行时错误。

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;

编辑:

我必须使用三维数组。我创建了一个具有相同风格的二维数组,并希望将其扩展为三个,因为这就是我需要的。但是你可以看到我感到困惑。

谢谢 Bo Persson

2 个答案:

答案 0 :(得分:2)

这部分

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 :(得分:1)

用指针做这种事情最终会让你感到高兴。

如果您真的需要三维数组,一种更简单的方法是使用嵌套的STL容器。即std::vector<std::vector<std::vector<int>>>>

确保您正在解决正确的问题。我并不是说你不是,但我只是觉得你可以在没有三维数组的情况下解决它,这可能是一个可以处理的野兽,特别是如果你对指针感到不舒服。

相关问题