Как выделить многомерный массив внутри класса?Выдает ошибку, когда строка> столбец? - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь написать класс доски для большого пальца.Я пытался выделить память динамически, это работает для любого массива, который имеет размер строки <= столбец.Однако он выдает ошибку, когда строка> столбец.Иногда работает, пока он выделяет, но не берет, когда ему присваивается значение.Есть ли способ проверить, где проблема?Кроме того, я должен просто выделить одномерный массив вместо двух.

#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);
}

1 Ответ

0 голосов
/ 31 января 2019

Вы просто перепутали строки и столбцы при инициализации массива.

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 перед назначением выделенной памяти не требуется.

...