【问题标题】:Allocate memory 2d array in function C++在函数 C++ 中分配内存二维数组
【发布时间】:2016-06-21 19:46:12
【问题描述】:

我正在尝试为 C++ 中的函数内的二维数组动态分配内存。 除了它是使用 malloc 和 dealloc 编写的之外,已经提出了一个与此完全相同的问题,所以我想知道您是否可以帮助我将其转换为使用 new 和 delete。这是另一个问题:

Allocate memory 2d array in function C

我尝试将其更改为以下代码,但出现错误。

void assign_memory_for_board(int ROWS, int COLS, int *** board) {
   *board = new int**[ROWS];
   for (int i = 0; i < ROWS; i++) {
       (*board)[i] = new int*[COLS];
   }
}

这是使用 malloc 和 dealloc 的答案:

void allocate_mem(int*** arr, int n, int m)
{
   *arr = (int**)malloc(n*sizeof(int*));
   for(int i=0; i<n; i++)
      (*arr)[i] = (int*)malloc(m*sizeof(int));
} 

谢谢!

【问题讨论】:

  • 为什么这么多明星?只需使用适当的标准容器。
  • 除非另有限制,否则始终首选std::vector 或std::array,并考虑使用2D 视图而不是1D 物理阵列。
  • 抱歉,标准容器是什么意思?
  • 像 std::vector 这样的标准容器。
  • std::vector 等。人。

标签: c++ arrays multidimensional-array dynamic-memory-allocation


【解决方案1】:

试试看

int AllocMatrix(int ***K, int h, int c){
    *K = new int *[h];
    for(int i=0; i < h; i++){
        *K[i] = new int[c];
    }
    if(K == NULL){
        return 0;
    }
    cout<<"Avaiable!"<<endl;
    return 1;
}

【讨论】:

    【解决方案2】:

    你有额外的星星。函数应该是

    void assign_memory_for_board(int ROWS, int COLS, int *** board) {
       *board = new int*[ROWS];
       for (int i = 0; i < ROWS; i++) {
           (*board)[i] = new int[COLS];
       }
    }
    

    【讨论】:

    • 非常感谢!那么 C++ 会处理一些指针吗?因为在 C 中有更多的指针。
    • char* hoge = new char[10]; <type of pointer to elements of the array> <variable name> = new <type of elements of the array>[<number of eiements>];
    猜你喜欢
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    相关资源
    最近更新 更多