Что происходит с моим кодом?

Как передать двумерный массив в функцию для распечатки его содержимого в произвольном порядке?
  • 17 июля 2024 г. 18:12
Ответы на вопрос 2
Для передачи двумерного массива в функцию и печати его содержимого в произвольном порядке, можно использовать указатель на указатель на элемент массива. 

Пример кода:

```cpp
#include <iostream>
#include <cstdlib>

void printArray(int** array, int rows, int cols) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            std::cout << array[i][j] << " ";
        }
        std::cout << std::endl;
    }
}

int main() {
    int rows = 3;
    int cols = 3;

    // Выделяем память под двумерный массив
    int** array = new int*[rows];
    for (int i = 0; i < rows; i++) {
        array[i] = new int[cols];
        for (int j = 0; j < cols; j++) {
            array[i][j] = rand() % 100; // Заполняем массив случайными значениями
        }
    }

    // Выводим массив до сортировки
    std::cout << "До сортировки:" << std::endl;
    printArray(array, rows, cols);

    // Освобождаем память
    for (int i = 0; i < rows; i++) {
        delete[] array[i];
    }
    delete[] array;

    return 0;
}
```

Этот код создает двумерный массив случайных чисел, выводит его содержимое до сортировки, а затем освобождает выделенную память. Функция `printArray` принимает указатель на указатель на массив и размеры массива (количество строк и столбцов) и распечатывает содержимое массива.
Дык попробуйте скомпилировать свою программу и увидите следующую ошибку: 
main.cpp: In function ‘int main()’:
main.cpp:19:35: error: ‘a’ was not declared in this scope
   19 |                 arr[i] = new int [a];
      |                                   ^

Здесь сказано, что переменная `a` не определена. Её и правда нигде в коде нет.

Память, выделенная для подмассивов внутри arr, не освобождается = утечка памяти. Вы же выполняете сначала один new, а потом в цикле выполняете ещё new для каждого подмассива. Освобождать память с помощью delete надо по такой же логике - сначала для подмассивов, а потом только для самого arr - delete[] arr.
Похожие вопросы