如何返回二维char数组c ++?

r4c*_*oon 10 c++ arrays multidimensional-array

我在函数内部创建了二维数组,我想返回该数组,并将其传递给其他函数.

char *createBoard( ){  
  char board[16][10];
  int j =0;int i = 0;
  for(i=0; i<16;i++){
        for( j=0;j<10;j++){   
                board[i][j]=(char)201;
        }   
  }
  return board;
}
Run Code Online (Sandbox Code Playgroud)

但这一直给我错误

180*_*ION 11

是的,看看你在做什么,返回一个指向一个board在堆栈上创建的对象(被调用的数组)的指针.当数组超出范围时会被销毁,因此指针不再指向任何有效对象(悬空指针).

您需要确保使用在堆上分配数组new.在现代C++中创建动态分配的数组的神圣方法是使用类似std::vector类的东西,尽管这在你尝试创建2D数组时更复杂.

char **createBoard()
{
    char **board=new char*[16];
    for (int i=0; i<16; i++)
    {
       board[i] = new char[10];
       for (int j=0; j<10; j++)
         board[i][j]=(char)201;
    }

    return board;
}

void freeBoard(char **board)
{
    for (int i=0; i<16; i++)
      delete [] board[i];
    delete [] board;
}
Run Code Online (Sandbox Code Playgroud)


小智 11

最好的方法是创建一个board类并使ctreateBoard函数成为它的构造函数:

class Board {
  private:
   char mSquares[16][10];

   public:
    Board() {
        for(int i=0; i<16;i++){
        for( int j=0;j<10;j++){   
                mSquares[i][j]=201;
        }       
    }

   // suitable member functions here
 };
Run Code Online (Sandbox Code Playgroud)

有关如何使用这样一个课程的信息,没有什么可以替代阅读一本好书.我强烈推荐Andrew Koenig和Barbra Moo的Accelerated C++.

  • 一个简单但不好的方式. (4认同)