【问题标题】:How to create a 2D array using a function?如何使用函数创建二维数组?
【发布时间】:2021-01-16 00:25:28
【问题描述】:

我正在尝试定义一个二维数组,但我想在一个函数中进行,

这是我的代码:

int** createArray( int columns, int rows)
{   
    int** array[rows];
    for(int i = 0; i < rows; i++)
    {
        array[i] = new int*[columns];
    }

    for(int i = 0; i <columns; i++)
    {
        for(int j = 0; j < rows; j++)
        {
            array[i][j] = 0;
            std::cout <<array[i][j];
        }
        std::cout<<"\n";
    }
    return *array;
}

int main()
{
    
int **myArray = createArray(3,5);


for(int k =0; k < 5; k++)
{
    if( (myArray[0][k] == 0) && (&myArray[1][k] == 0)) //segmentation fault
    {
        myArray[2][k] = 10; //segmentation fault
    }

delete[] myArray;
}

但它会导致错误,可以看作是行中的 cmets。我是 C++ 新手,我不知道如何解决这个问题。

非常感谢

【问题讨论】:

  • 错误是不言自明的。您提到了int 作为createArray 函数的返回类型(看看如何编写函数签名)。将其更改为变量array的类型
  • 谢谢,但正如我所说,我是 C++ 新手,所以对我来说这个错误不是不言自明的,我该如何解决?我试图将函数类型更改为 void 但现在我无法为创建的数组命名
  • @Cherubim 所说的是将createArray 的返回类型更改为int**。您必须始终归还您承诺归还的东西!
  • @Botje 除了createArray 中的array 不是int** 也不能转换成那个。
  • @Mechatrnk 请不要自己惹newdelete。这不是 C++ 的意图,而是标准容器类(即std::vector&lt;T&gt;std::array&lt;T,Size&gt;)的用途。

标签: c++ function return


【解决方案1】:

首选std::vector 而不是手动内存管理:

std::vector<std::vector<int>> createArray(int columns, int rows)
{   
    return std::vector<std::vector<int>(rows, std::vector<int>(columns));
}

int main()
{
    int COLUMNS = 5;
    int ROWS = 3;
    auto myArray= createArray(COLUMNS, ROWS); 

    /*
    Do stuff
    */

    //std::vector handles delete on it's own, no need to clean up
}

如果由于某种原因不能使用std::vector,这是在堆上初始化二维数组的一种方法:

int** createArray(int columns, int rows)
{   
    int** arr = new int*[rows];
    for(int i = 0; i < rows; ++i) 
    {
        arr[i] = new int[columns];
    }

    return arr;
}

int main()
{
    int COLUMNS = 5;
    int ROWS = 3;
    int** myArray= createArray(COLUMNS, ROWS); 

    /*
    Do stuff
    */

    //you need to a delete for every new and delete[] for every new[]
    for(int i = 0; i < rows; ++i)    
    {
        delete[] myArray[i];
    }
    delete[] myArray;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    相关资源
    最近更新 更多