我在函数内部创建了二维数组,我想返回该数组,并将其传递给其他函数.
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; }
但这一直给我错误
是的,看看你在做什么,返回一个指向一个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; }
最好的方法是创建一个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 };
有关如何使用这样一个课程的信息,没有什么可以替代阅读一本好书.我强烈推荐Andrew Koenig和Barbra Moo的Accelerated C++.