Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

Ошибки при освобождении памяти - C++
В приложении обрабатывается сообщение WM_DROPFILES, при попытке удаления строк szFileNameA и szFileNameW вылетает ошибка &quot;HEAP CURRUPTION...

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

Ошибка при освобождении памяти - C++
Здравствуйте! Пишу на MS Visual C++ 2010, windows 7. При вызове функции resize() на строке delete arr; происходит ошибка,...

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

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

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

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

Добавлено через 19 часов 10 минут
Часто на форумах встречал упоминания о Valgrind. На таком примере его можно запустить и кое-что понять для себя?
0
04.02.2014, 16:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2014, 16:42
Привет! Вот еще темы с ответами:

Ошибка при освобождении памяти - C++
#include &lt;iostream&gt; using namespace std; template&lt;class T&gt; class pvector { T **p; int sz; public:

Ошибка при освобождении памяти - C++
Задача: Из стандартного входного потока вводятся сроки. Признаком завершения каждой сроки является символ ‘\n’. Признаком конца текста...

Ошибка при освобождении памяти - C++
Все идет замечательно, но вот когда происходит удаление массива программа крашится.. #include &lt;iostream&gt; using namespace std; ...

new и delete при освобождении памяти - C++
Здравствуйте. Скажите, пожалуйста что я неправильно делаю. При освобождении памяти. Выделяем память: char **VIRTUAL = NULL; if...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.