Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2012, 22:46   #1
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию Осв. памяти дин. двумерного массива

Как полностью освободить память динамического двумерного массива.

Вот код:

Код:
char **pointer = new char* [10];
   for( int i = 0; i < 10; i++ )
         pointer[i] = new char[100];
   delete [] pointer;
Дело в том что в этом цикле выделение памяти происходит 10 раз и при удалении памяти мы удаляем только 0 элемент массива, а остальные 9 элементов становятся не доступны и происходит утечка памяти
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
kineziz вне форума Ответить с цитированием
Старый 06.06.2012, 22:47   #2
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

Или я что то путаю
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
kineziz вне форума Ответить с цитированием
Старый 06.06.2012, 23:32   #3
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Код:
char **pointer = new char* [10];
Здесь выделяется память под 10 указателей;
Код:
for( int i = 0; i < 10; i++ )
         pointer[i] = new char[100];
здесь в каждый из них записывается адрес выделенной памяти под 100 char'ов.

Соответственно, удаление только массива pointer
Код:
delete [] pointer;
Удалит первый участок, остальные останутся выделенными, и, кроме того, мы потеряем адреса к ним (т.к. удалили массив pointer). Правильное удаление:
Код:
for (int i = 0; i < 10; ++i) {
    delete [] p[i];
}
delete [] pointer;
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 06.06.2012, 23:43   #4
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

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


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файлы и дин. переменные. Изменить с использованием дин. переменных. Маленыч Паскаль, Turbo Pascal, PascalABC.NET 4 07.06.2012 11:17
Как обнулить элементы строки двумерного массива, содержащей наибольшее количество элементов одномерного массива griignat Помощь студентам 1 22.11.2011 20:04
из дин. дека в дин. стек (Borland С++) mego4el Помощь студентам 1 07.07.2011 14:41
выделение дин памяти и удаление Nekesh Общие вопросы C/C++ 2 11.10.2010 13:30
сортировка двумерного массива cornholio Помощь студентам 1 27.11.2007 23:36