C ++ сбой после печати 2-мерного массива - PullRequest
0 голосов
/ 18 ноября 2018

После печати двумерного массива моя программа падает, и я не знаю почему.Программа вылетает до того, как будет напечатано «test2»:

//initialising
int** matrix = new int*[x * y];
for (int i = 0; i < x; i++){
    matrix[i] = new int[y];
}
//filling with 0
for (int row = 0; row < x; row++){
     for (int cols = 0; cols < y; cols++){
          matrix [row][cols] = 0;
     }
}
//printing
for(int i = 0; i < x; ++i) {
    for(int j = 0; j < y; ++j){
       std::cout << (matrix[i][j]) << ", ";
    }
    std::cout << std::endl;
}

std::cout << "test2" << std::endl;

1 Ответ

0 голосов
/ 18 ноября 2018
 #include<iostream>

 void func(int x, int y)
 {
    // initialising
    int **matrix = new int *[x];
    for (int i = 0; i < x; i++)
    {
        matrix[i] = new int[y];
    }
// filling with 0
    for (int row = 0; row < x; row++)
    {
        for (int cols = 0; cols < y; cols++)
    {
        matrix[row][cols] = 0;
    }
}
// printing
for (int i = 0; i < (x); ++i)
{
    for (int j = 0; j < (y); ++j)
    {
        std::cout << (matrix[i][j]) << ", ";
    }
    std::cout << std::endl;
}

std::cout << "test2" << std::endl;

    for(int i = 0; i < x; i++)
          delete[]matrix[i]; // clean up each y

delete[]matrix;  // clean up x
 }

 int main()
 {
    func(5, 5);
 } 

Ваш массив x должен быть только длиной x.каждый из ваших указателей x указывает на массив длиной y.при вызове new [] вы должны вызывать delete [] для каждого указателя, выделенного new [], чтобы предотвратить утечки памяти.Вот проверка кода https://ideone.com/UL2IJn

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...