c++ - 动态创建二维数组的函数

标签 c++ arrays pointers 2d

我想在一个单独的函数中创建一个动态二维数组。数组的大小将在运行时确定。

直接传递一个数组:

  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/

相关文章:

c++ - 将 std::list::remove_if 与 MyClass 函数一起使用

c# - 同一台机器上的两个程序相互通信的最佳方式是什么

C++删除数组崩溃

javascript - jQuery从JSON解析时找不到元素

c++ - 当放置并推送到智能指针 vector 时,原始指针是否会自动转换为智能指针?

c++ - 如何使我的应用程序具有 DPI 感知能力?

c - 无法在 C 中打印指针数组

java - 在 Java (Blue J) 中对 ArrayLIst 使用 for 循环?

pointers - 复制一片指针(指向新值)

c - 通过二维指针数组循环的段错误