Ошибка динамически выделяемого 2D-массива EXC_BAD_ACCESS в C

#c #arrays #runtime #runtime-error

#c #массивы #время выполнения #время выполнения-ошибка

Вопрос:

Я нахожусь на ранних стадиях своей программы, и сейчас я просто пытаюсь инициализировать 2D-массив для хранения всех тире, но я продолжаю получать ошибку ECX_BAD_ACCESS. Кажется, что мой код работает с квадратным массивом (например, 5×5 или 6×6), но если я делаю 10 на 5, я получаю ошибку.

 void readMatrix(char **twoDarray, int amp;rows, int amp;cols)
{

std::cout << "Enter number of rows for board";
std::cin >> rows;
std::cout << "Enter number of columns for board";
std::cin >> cols;


//dynamic 2D array initialization
twoDarray = new char*[rows];
for(int i = 0; i < cols;   i)
    twoDarray[i] = new char[rows];

//set elements of array to dashes
for(int i = 0; i < rows;   i)
    for(int j = 0; j < cols;   j){
        twoDarray[i][j] = '-';
        }

//printing the array
for(int i = 0; i < rows;   i){
    std::cout << "  " << std::endl;
    for(int j = 0; j < cols;   j)
        std::cout << twoDarray[i][j] << "  ";
}

}
  

Ответ №1:

Ваш первый цикл for должен переходить от 0 к #rows, а не #cols . Кроме того, в теле того же цикла выделяются столбцы, а не строки.