Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
-1 / 1 / 0
Регистрация: 28.10.2017
Сообщений: 50

Утечка памяти в задаче с двумерным динамическим массивом

28.04.2019, 22:18. Показов 1771. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
 
Matrix::Matrix(int n,int m) // конструктор с параметрами
{
    N=n;
    M=m;
     // объявление двумерного динамического массива на 10 элементов:
int **arr = new int* [N]; // две строки в массиве
    for (int count = 0; count < N; count++)
        arr[count] = new int [M]; // и пять столбцов
//  где arr – массив указателей на выделенный участок памяти под массив вещественных чисел  типа int
 
    //заполняем матрицу случаными числами от 0 до 50
     srand(time(NULL));
     for (int i = 0; i < N; i++) 
    {
        for (int j = 0; j < M; j++) 
        {
            arr[i][j] = rand()%50;
        }
    }
}
 
Matrix::~Matrix() // десструктор класса Matrix
{
  // высвобождение памяти отводимой под двумерный динамический массив:
    for (int count = 0; count < N; count++)
        delete [] arr[count];
//      где N – количество строк в массиве
}
Добавлено через 38 секунд
почему при освобождении памяти ошибка

Добавлено через 42 секунды
Все меня осенило

Добавлено через 24 секунды
Всем спс
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.04.2019, 22:18
Ответы с готовыми решениями:

Работа с двумерным динамическим массивом
Доброго времени суток! Имеется некая введенная таблица mas (i - кол. строк), допустим: A B C D M A P D H L J A ...

Работа с динамическим двумерным массивом
Написал код. В двумерном массиве 5х5 находится максимальное значение каждой строки и затем минимальное из них. Необходимо указывать...

Ошибка с памятью при работе с динамическим двумерным массивом
Вроде всё правильно, но в ходе работы программа выдаёт ошибку(на скрине). Дело в двумерном динамическом массиве. Ниже код с функцией, куда...

5
0 / 0 / 0
Регистрация: 25.09.2018
Сообщений: 74
29.04.2019, 05:45
Цитата Сообщение от amoteo Посмотреть сообщение
Всем спс
Обращайся
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
29.04.2019, 05:49
C++
1
2
3
4
5
6
7
Matrix::~Matrix() // десструктор класса Matrix
{
  // высвобождение памяти отводимой под двумерный динамический массив:
    for (int count = 0; count < N; count++)
        delete [] arr[count];
    delete[] arr;
}
0
3 / 3 / 0
Регистрация: 14.03.2019
Сообщений: 25
29.04.2019, 17:44
Небольшой дополнительный вопрос по удалению. Если проверить, всегда ли данные после удаления выделенной памятидолжны быть недоступны? Какие-то ситуации встречались, например функция делает указатель на new, потом его принимаю, а потом удаляю в главной программе, но при этом массив все равно доступен, все элементы в целости. Значит неправильно произведено было?
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
29.04.2019, 18:08
Почему неправильно,
память после освобождения не сразу задействуется под другие задачи,
соответственно, там остались старые значения.
0
3 / 3 / 0
Регистрация: 14.03.2019
Сообщений: 25
29.04.2019, 20:00
Цитата Сообщение от zss Посмотреть сообщение
Почему неправильно,
память после освобождения не сразу задействуется под другие задачи,
соответственно, там остались старые значения.
Так-то по идее и должно быть, однако мне сначала попадались варианты, когда стертая память сразу портилась. Причем все время одними и тем же мусором забивалась, если повторно инициализировать и снова удалить, т.е выглядит как скорее фактически не данные уничтожаются, а ссылка затирается или подменяется.
Вот исходя из этого и сделал вывод что якобы проверять так можно, высвобождена ли на самом деле память.
Однако сейчас поэкспериментировал, - оказаось действительно неоднозначно все, получается все время что результат привязан к "фрагменту кода", и больше других закономерностей не нашел)
Это я конечно рассуждаю о трехстрочных программах, где расход памяти не важен как таковой.

Например вот такой фрагмент все время сохраняет данные после удаления, перезапускал в разное время, перекомпилировал, и имена переменных менял даже

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
     int n=4;
      cout << "Enter " << n << " elements matrix A:\n";
      double *A = new double[n];
      for (int i = 0; i < n; i++)
        cin >> A[i];
 
 
 
      for(int i=0; i<n; i++)
        cout <<A[i] <<"  ";
 
      delete[]A;
 
      for(int i=0; i<n; i++)
        cout <<A[i] <<"  ";

А вот другой фрагмент, он всегда стирается полностью

C++
1
char* pstr = new char[4]{'A', 'B', 'C', '\0'};
Или в другом варианте еще частично только теряется.

Но ни от типа выделяемого данного, ни от способа инициализации не зависит тоже. Какая-то система там конечно есть, но на вид состояние после удаления как будто всегда привязано к написаному исходнику.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.04.2019, 20:00
Помогаю со студенческими работами здесь

Создать класс для работы с двумерным динамическим массивом чисел
Создать класс для работы с двумерным динамическим массивом чисел. Методы: -заполнить массив рандомно. -вывести массив. И...

Написать программу для работы с динамическим целочисленным двумерным массивом
Написать программу для работы с динамическим целочисленным двумерным массивом. Количество строк, столбцов и элементы массива вводятся с...

Опрос: что по-вашему можно считать двумерным динамическим массивом?
int main(void) { int (*p)(0); p = new int; p = 8; delete p; p = 0;

Ошибка при работе с двумерным динамическим массивом, созданным через функцию
Доброго времени суток. У меня проблема при работе с динамическим массивом, созданным через функцию. При компиляции ошибок нет. Но при...

Структура с динамическим массивом, предоставление памяти и её очистка
Когда пытаюсь скомпилить выдает: z1-1.exe has triggered a breakpoint. Помогите разобраться. Вот Задача:Заданы два массива А(5) и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru