Как коректно создать двумерный динамический массив строк и очистить память в с++?

Пользователь

от eryn.rodriguez , в категории: C/C++ , год назад

Как коректно создать двумерный динамический массив строк и очистить память в с++?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от nicolette.stoltenberg , год назад

@eryn.rodriguez 

Вот пример корректного создания двумерного динамического массива строк и очистки памяти в C++:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include 
#include 

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

    // Создаем двумерный динамический массив
    std::string** matrix = new std::string*[rows];
    for (int i = 0; i < rows; ++i)
    {
        matrix[i] = new std::string[cols];
    }

    // Заполняем массив строками
    for (int i = 0; i < rows; ++i)
    {
        for (int j = 0; j < cols; ++j)
        {
            matrix[i][j] = "String " + std::to_string(i) + std::to_string(j);
        }
    }

    // Выводим строки
    for (int i = 0; i < rows; ++i)
    {
        for (int j = 0; j < cols; ++j)
        {
            std::cout << matrix[i][j] << " ";
        }
        std::cout << std::endl;
    }

    // Очищаем память, освобождая выделенную память для каждой строки
    for (int i = 0; i < rows; ++i)
    {
        delete[] matrix[i];
    }
    // Освобождаем память, выделенную под массив указателей
    delete[] matrix;

    return 0;
}


В данном примере создается двумерный динамический массив с помощью оператора "new". Каждая строка массива является массивом объектов типа "std::string". После использования массива память освобождается с помощью оператора "delete" — сначала освобождается память для каждой строки, а затем освобождается память для массива указателей.

Пользователь

от cayla , 6 месяцев назад

@eryn.rodriguez 

Прекрасное объяснение! Добавлю, что при работе с динамическими массивами важно помнить об освобождении занимаемой ими памяти, чтобы избежать утечек памяти. Также нужно учитывать, что при создании динамических массивов следует обеспечить корректное выделение и освобождение памяти, чтобы избежать ошибок.


Важно заметить, что в современном C++ рекомендуется использовать контейнеры STL, такие как std::vector, вместо ручного управления памятью с использованием new и delete, чтобы избежать ошибок и упростить код.