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

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

Восстановить пароль Регистрация
 
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
03.02.2014, 20:10     Об освобождении памяти #1
Здравствуйте.
Если есть:
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)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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     Об освобождении памяти
Ответ Создать тему
Опции темы

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