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

Двойной указатель - C++

Восстановить пароль Регистрация
 
Лев Борисов
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 99
17.09.2013, 16:38     Двойной указатель #1
C++
1
2
3
4
for (i=0; i<N; i++)
        delete [] A[i];
    //Освобождение памяти для A
    delete []A;
Вопрос по синтаксису: для чего необходимо ставить [] в первом случае для очистки памяти, выделенной ранее для двумерного динамического массива.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,337
Завершенные тесты: 1
17.09.2013, 16:47     Двойной указатель #2
Лев Борисов, покажите как выделяли. Так нагляднее будет.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
17.09.2013, 16:48     Двойной указатель #3
Если память под каждый массив A[i] выделялась динамически, как-нить в духе
C++
1
2
for (i=0; i<N; i++)
        A[i] = new int[100500];
то и освобождать эту память нужно с помощью delete [].
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
17.09.2013, 16:52     Двойной указатель #4
Цитата Сообщение от Лев Борисов Посмотреть сообщение
для чего необходимо ставить [] в первом случае для очистки памяти, выделенной ранее для двумерного динамического массива.
Потому что двумерный массив - это по сути массив массивов. А для освобождения памяти выделенной под массив (оператор new[]), нужно и освобождать ее как для массива (оператор delete[]).
lipnev
60 / 60 / 1
Регистрация: 14.09.2013
Сообщений: 145
17.09.2013, 16:59     Двойной указатель #5
Двумерный динамический массив можно представить как массив одномерных массивов. То есть, если у тебя массив A[m][n], то это означает, что у тебя в каждом элементе A[i] содержится массив элементов A[i][n]. Например, если представить этот массив как столбцы и строки, то A[m] это будет первый столбец, а массив A[i][n] будет отдельной строкой. Поэтому ты сначала очищаешь память внутренних массивов, а затем главного внешнего.
Динамический массив отличается от простого статического тем, что ты можешь иметь одномерные массивы любой желаемой длины. То есть ты можешь создать такой массив A[2][2], который будет состоять из 4 элементов, а потом добавить в него элементы или удалить. То есть, допустим в массив A[0] будет содержать внутри себя массив из 5 элементов, а массив A[1] допустим 3. Надеюсь не запутал в конец.
Лев Борисов
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 99
17.09.2013, 20:40  [ТС]     Двойной указатель #6
Динамически выдел:
C++
1
2
3
4
int **A,
A = new int *[N];
for (i=0; i<N; i++)
    A[i]= new int [M];
В принципе-то мне понятна суть, синтаксис только лишь запутал.
Спасибо всем
Yandex
Объявления
17.09.2013, 20:40     Двойной указатель
Ответ Создать тему
Опции темы

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