我想在一个单独的函数中创建一个动态二维数组。数组的大小将在运行时确定。
直接传递一个数组:
void foo(int **arr,int width,int height)
{
arr=new int*[width];
for(int i=0;i<height;i++)
{
arr[i]=new int[height];
}
//fill...
}
...
int** array;
foo(array)
好像不行
通过指针传递数组
void foo(int ***arr,int width,int height)
{
*arr=new int*[width];
for(int i=0;i<height;i++)
{
*arr[i]=new int[height];
}
//fill...
}
...
int **array;
foo(&array)
好像也没用
我该怎么做?
最佳答案
我认为您的“问题”是由于忽略 operator precedence 引起的
您发布的第二个代码似乎有错误:
*arr[i]=new int[height];
应该是
(*arr)[i]=new int[height];
此外,正如其他人指出的那样,使用原始指针有时可能非常邪恶(就像在您的示例中使用指向指针的指针),原始指针也可以导致一些内存泄漏、悬空指针、等问题。使用一些“更实用”的东西,比如 std::vector
或其他一些 STL 容器。
(注意:术语“STL”是指基于 STL 的标准库的一部分)
关于c++ - 动态创建二维数组的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37555327/