Problem z wczytywaniem liczb do macierzy

0

Cześć,

Problem polega na tym, że program do 2 wiersza wczytuje liczby normalnie, a przy tworzeniu 3 z jakiegoś powodu wywala błąd.
Funkcja wygląda tak:

* 
int** getMatrix(){
    int  i,j;
    int width,height;

    cout << "Podaj liczbe kolumn macierzy: ";
    cin >> width;
    cout << "Podaj liczbe wierszy macierzy: ";
    cin >> height;


    int** matrix;
    matrix = new int*[height];
    matrix[height] = new int[width];

//wypełnianie macierzy 0
    for(i=0; i<height; i++){
        for(j=0; j<width; j++){
           matrix[i][j] = 0;
        }
    }

    cout << "Kolejne elementy macierzy w wierszu oddziel spacja." << endl;
    cout << "Aby zapisac liczby w kolejnym wierszu nacisnij enter." << endl;
    cout << "Podaj liczby do zapisania w macierzy: " << endl;

//wypełnianie macierzy własnymi liczbami
    for(i=0; i<height; i++){
        for(j=0; j<width; j++){
            cin >> matrix[i][j];
        }
    }


    cout << "\n\n";

//sprawdzenie czy macierz się dobrze zapisała
    for(i=0; i<height; i++){
        for(j=0; j<width; j++){
            cout <<  matrix[i][j] << " ";
        }
        cout << endl;
    }


    return matrix;
}

Przy zapisywaniu więcej niż 2 wierszu wyskakuje komunikat:
Process finished with exit code -1073741571 (0xC00000FD)

3

Wychodzisz poza zakres tablicy matrix - czyli źle ją tworzysz.

    int** matrix;
    matrix = new int*[height];
    matrix[height] = new int[width]; // !!! UB !!!

Nie ma lekko i trzeba/można użyć tutaj pętli.

   int** matrix = new int*[height];
   for( int i {0}; i<height ; ++i )  
        matrix[i] = new int[width]; 

Jeżeli nie jest to zadanie związane z nauką wskaźników, to polecam std::vector.

2

https://dsp.krzaq.cc/post/176/ucze-sie-cxx-kiedy-uzywac-new-i-delete/

std::vector<std::vector<int>> getMatrix(){
    int  i,j;
    int width,height;

    cout << "Podaj liczbe kolumn macierzy: ";
    cin >> width;
    cout << "Podaj liczbe wierszy macierzy: ";
    cin >> height;
    std::vector<std::vector<int>> matrix(height, std::vector<int>(width));

    cout << "Kolejne elementy macierzy w wierszu oddziel spacja." << endl;
    cout << "Aby zapisac liczby w kolejnym wierszu nacisnij enter." << endl;
    cout << "Podaj liczby do zapisania w macierzy: " << endl;

    for(auto& row : matrix) {
        for(auto& a : row){
            cin >> a;
        }
    }
    return matrix;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1