如何在类内分配多维数组?当行>列时会引发错误?

How to allocate multidimensional array inside a class? It throws an error when row > column?

本文关键字:gt 错误 当行 分配 数组      更新时间:2023-10-16

我正在尝试为大板尺寸的井字游戏编写一个板类。我正在尝试动态分配内存,它适用于任何具有大小行 <= 列的数组。但是,当行>列时,它会引发错误。有时在分配时有效,但在为其分配值时不需要。有没有办法检查问题出在哪里?另外,我应该只分配一个单维数组而不是两个。

#include <iostream>
#include <iomanip>
#include <string>

using namespace std;
class BOARD{
  public:   
  static const int Max_row_size = 11;
  static const int Max_col_size = 14;
  int row;
  int col;
  char**board;
  char **initializeBoard(int row, int col);
  void printBoard(char ** board);
  BOARD(int row_size, int col_size);

};
BOARD::BOARD ( int row_size , int col_size ) {
      row = row_size;
      col = col_size;
      board = initializeBoard(row, col);
      printBoard(board);
    }
char **BOARD::initializeBoard ( int row_size , int col_size ) {
    row = row_size;
    col = col_size;
    char** playing_board;
    playing_board = new char*[col];
    for( int i = 0; i < col ; i++ ) {
        playing_board[i] = nullptr;
        playing_board[i]=new char[row];
    }
    char location = '1';
    for ( int i = 0 ; i < row; i++ ) {
        for( int j = 0; j < col; j++ ) {
            playing_board[i][j] = location;
        }
    }
    return playing_board;
}
int main(){

  BOARD x(5,4);
}

只是在初始化数组时混淆了行和列。

for ( int i = 0 ; i < row; i++ ) {
    for( int j = 0; j < col; j++ ) {

应该是

for ( int i = 0 ; i < col; i++ ) {
    for( int j = 0; j < row; j++ ) {

分配单个数组是一种替代方法,我个人认为它们之间没有太多选择。但是您可以做出的重要改进是使用std::vector而不是自己分配内存。除非你被明确告知必须使用数组,否则你应该改用std::vector

您也可以更改此设置

for( int i = 0; i < col ; i++ ) {
    playing_board[i] = nullptr;
    playing_board[i]=new char[row];
}

对此

for( int i = 0; i < col ; i++ ) {
    playing_board[i]=new char[row];
}
在分配分配

的内存之前分配nullptr是不必要的。