Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
1

Об освобождении памяти

03.02.2014, 20:10. Показов 1058. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Если есть:
C++
1
char** arr = new char* [X];
Нужно ли делать полный цикл:

C++
1
2
3
4
5
6
for (int row = 0; row < X; ++row)
    {
        delete [] arr[row];
    }
    
delete [] arr;
или можно обойтись последним оператором?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.02.2014, 20:10
Ответы с готовыми решениями:

Ошибка при освобождении памяти
Здравствуйте. Знаю, что тема уже много раз поднималась в самых разнообразных местах и с очень...

Ошибка при освобождении памяти
#include &lt;iostream&gt; using namespace std; #include &lt;stdlib.h&gt; #include &lt;fstream&gt; #include...

Ошибка при освобождении памяти
Условие задачи: В текстовом файле посчитать количество строк, а также для каждой отдельной строки...

Выделение и освобождении памяти массива
Было задание с динамически изменяемым массивом при вводе с клавиатуры. Суть в работе с 2 динам....

5
22 / 22 / 7
Регистрация: 01.12.2013
Сообщений: 93
03.02.2014, 20:26 2
andrejap, первый код выделяет память для указателей, тем временем указатели никуда не указывают, поэтому во втором коде в цикле удаление не нужно.
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 865
Записей в блоге: 1
03.02.2014, 21:10 3
Цитата Сообщение от Megabar Посмотреть сообщение
andrejap, первый код выделяет память для указателей, тем временем указатели никуда не указывают, поэтому во втором коде в цикле удаление не нужно.
Вы правы отчасти: только если это весь код. Но после
char** arr = new char* [X];
наверняка последует код объявления for (int row = 0; row < X; ++row) arr[row]=new char[Y];
или вы думаете это будет из серии *arr[0]='a'; *arr[1]='b'.....?
1
22 / 22 / 7
Регистрация: 01.12.2013
Сообщений: 93
03.02.2014, 21:20 4
Цитата Сообщение от mustimur Посмотреть сообщение
или вы думаете это будет из серии *arr[0]='a'; *arr[1]='b'.....?
Не-е

Цитата Сообщение от mustimur Посмотреть сообщение
Вы правы отчасти: только если это весь код. Но после
char** arr = new char* [X];
наверняка последует код объявления for (int row = 0; row < X; ++row) arr[row]=new char[Y];
Вы правильно говорите. Мой ответ исходит только из увиденного сообщения ТС.
А так да. В таком случае освобождение в цикле остается в силе.
1
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 865
Записей в блоге: 1
03.02.2014, 21:27 5
Лучший ответ Сообщение было отмечено andrejap как решение

Решение

Цитата Сообщение от Megabar Посмотреть сообщение
А так да. В таком случае освобождение в цикле остается в силе.
Вот на этом совете и сойдемся
0
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
04.02.2014, 16:42  [ТС] 6
Спасибо за ответы. Да, после первой части кода есть код, который инициализирует элементы массива строковыми литералами.

Добавлено через 19 часов 10 минут
Часто на форумах встречал упоминания о Valgrind. На таком примере его можно запустить и кое-что понять для себя?
0
04.02.2014, 16:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.02.2014, 16:42
Помогаю со студенческими работами здесь

Ошибка при освобождении памяти
Здравствуйте, программа завершает работу в этом коде #include &lt;iostream&gt; #include &lt;ctime&gt;...

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

Исключение при освобождении памяти
Как ловить ошибки, типа: int* a = new int; for(int i = 0; i &lt; 5; ++i) a = 1; delete a;в...

new и delete при освобождении памяти
Здравствуйте. Скажите, пожалуйста что я неправильно делаю. При освобождении памяти. Выделяем...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru