Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
#1

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

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

Здравствуйте.
Если есть:
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;
или можно обойтись последним оператором?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2014, 20:10     Об освобождении памяти
Посмотрите здесь:

C++ Ошибка при освобождении памяти
Ошибка при освобождении памяти? C++
Ошибка при освобождении памяти C++
new и delete при освобождении памяти C++
Ошибка при освобождении памяти C++
Ошибка при освобождении памяти C++
C++ Ошибка при освобождении памяти
Ошибка при освобождении памяти C++
C++ Ошибки при освобождении памяти
Выделение и освобождении памяти массива C++
Ошибка при освобождении памяти C++
Ошибка при освобождении памяти C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Megabar
22 / 22 / 3
Регистрация: 01.12.2013
Сообщений: 93
03.02.2014, 20:26     Об освобождении памяти #2
andrejap, первый код выделяет память для указателей, тем временем указатели никуда не указывают, поэтому во втором коде в цикле удаление не нужно.
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 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'.....?
Megabar
22 / 22 / 3
Регистрация: 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];
Вы правильно говорите. Мой ответ исходит только из увиденного сообщения ТС.
А так да. В таком случае освобождение в цикле остается в силе.
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
03.02.2014, 21:27     Об освобождении памяти #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Megabar Посмотреть сообщение
А так да. В таком случае освобождение в цикле остается в силе.
Вот на этом совете и сойдемся
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
04.02.2014, 16:42  [ТС]     Об освобождении памяти #6
Спасибо за ответы. Да, после первой части кода есть код, который инициализирует элементы массива строковыми литералами.

Добавлено через 19 часов 10 минут
Часто на форумах встречал упоминания о Valgrind. На таком примере его можно запустить и кое-что понять для себя?
Yandex
Объявления
04.02.2014, 16:42     Об освобождении памяти
Ответ Создать тему
Опции темы

Текущее время: 21:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru