Top.Mail.Ru
Ответы

С++ динамичный массив работает странно

иногда код выводит все как надо, иногда мусор, иногда вообще ничего не печатает

По дате
По рейтингу
Аватар пользователя
Высший разум
1нед
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
#include <iomanip>
#include <iostream>
#include <random>

using namespace std;

void linebreak() {
    cout.put('\n');
}

void show_diagonal(int** const matrix, const size_t n) {
    for (size_t i = 0; i < n; ++i) {
        cout << setw(4) << matrix[i][i];
    }
    
}

void show_matrix(int** const matrix, const size_t n) {
    for (size_t i = 0; i < n; ++i) {
        for (size_t j = 0; j < n; ++j) {
            cout << setw(4) << matrix[i][j];
        }
        linebreak();
    }
    linebreak();
}

void fill_random(int** matrix, const size_t n) {
    uniform_int_distribution uid(10, 99);
    mt19937 gen{ random_device()() };
    for (size_t i = 0; i < n; ++i) {
        for (size_t j = 0; j < n; ++j) {
            matrix[i][j] = uid(gen);
        }
    }
}

int main() {
    cout << "Rank: ";
    size_t n;
    cin >> n;
    linebreak();
    auto matrix = new int* [n];
    for (size_t i = 0; i < n; ++i) {
        matrix[i] = new int[n];
        for (size_t j = 0; j < n; ++j) {
            matrix[i][j] = 0;
        }
    }
    fill_random(matrix, n);
    show_matrix(matrix, n);
    show_diagonal(matrix, n);
    for (size_t i = 0; i < n; ++i) {
        delete[] matrix[i];
    }
    delete[] matrix;
    matrix = nullptr;
}
Аватар пользователя
Мыслитель
1нед

Ты инициализируешь не двумерный массив, а два массива, каждый размерностью 10, а использовать пытаешься как двумерный.

Двумерный объявляется и инициализируется как-то так

12
int **bb = new int*[n];
for (i = 0; i < n; i++) bb[i] = new int[n]; // Каждый элемент должен быть инициализирован как одномерный массив
Аватар пользователя
Ученик
1нед

Бро, как долго c++ изучаешь? тоже хочу его изучать, работаешь программистом?