Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление многомерных мерных массивов, Посмотрите код пожалуйста 
V
    Опции темы
heforma
Дата 18.10.2011, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 9.8.2011

Репутация: нет
Всего: нет



Здравствуйте посмотрите мой код пожалуйста и скажите правильно ли я удалил 3х мерный массив
Код

#include <iostream>
using namespace std;
void main()
{
    int a=7,b=7,c=3;
    int ***array=new int** [c];
    for(int i=0,j=1;i<c;i++,j++)
    {
        array[i]=new int*[a];
        for(int j=0;j<a;j++)
        {
            array[i][j]=new int [b];
        }
    }
    for(int i=0;i<c;i++)
    {
        for(int j=0;j<a;j++)
        {
            for(int k=0;k<b;k++)
            {
                array[i][j][k]=1;
                cout<<array[i][j][k];
            
            }
            cout<<endl;
        }
        cout<<"\n\n\n";
    }
    for(int i=0;i<c;i++)
    {
        for(int j=0;j<a;j++)
        {
            delete[] array[i][j];
        }
    }
    for(int i=0;i<c;i++)
    {
    delete[] array[i];
    }
    delete[] array;
}

За ранее благодарен =)
PM MAIL   Вверх
newbee
Дата 18.10.2011, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 3
Всего: 19



Вроде бы да.
Код

    for(int i=0;i<c;i++)
    {
    delete[] array[i];
    }
Это можно было не выносить в отдельный цикл, выше ведь уже есть цикл, проходящий по 0..c. Зачем мучаться с такими сложными указателями, чем не нравится массив array[a*b*c]?


--------------------
You're face to face
With man who sold the world
PM   Вверх
heforma
Дата 18.10.2011, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 9.8.2011

Репутация: нет
Всего: нет



Цитата(newbee @ 18.10.2011,  19:14)
Вроде бы да.
Код

    for(int i=0;i<c;i++)
    {
    delete[] array[i];
    }
Это можно было не выносить в отдельный цикл, выше ведь уже есть цикл, проходящий по 0..c. Зачем мучаться с такими сложными указателями, чем не нравится массив array[a*b*c]?

Спасибо =) просто проходим многомерные массивы =)
PM MAIL   Вверх
math64
Дата 18.10.2011, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Можно использовать компромисс между одномерным массивом и  многомерным массивом(фактически, массивом двойных указателей):
Код

// я поменял местами a и b вашего примера - нелогично, что a средний индекс.
int* abc = new int[a*b*c];
int** bc = new int*[b*c];
int*** array = new int**[c];
for(int i = 0; i < c; i++) {
  int ib = i*b;
  array[i] = &bc[ib];
  for(int j=0; j < b; j++)
    bc[ib+j] = &abc[(ib+j)*a];
}
...
delete[] array;
delete[] bc;
delete[] abc;

Чуть более сложное создание, но удобство использования, как у многомерного массива, но занимет меньше памяти и проще удалять.
PM   Вверх
heforma
Дата 21.10.2011, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 9.8.2011

Репутация: нет
Всего: нет



Спасибо за отклик =)
PM MAIL   Вверх
bsa
Дата 21.10.2011, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(heforma @  18.10.2011,  21:53 Найти цитируемый пост)
просто проходим многомерные массивы =) 

В твоем коде нет многомерных массивов. Только одномерные.
Многомерный массив - это массив элементов одного типа расположенных последовательно в памяти, доступ к которым осуществляется по нескольким координатам.
У тебя же одномерный массив содержит указатели на указатель на указатель на целое... Чувствуешь? Одним типом тут и не пахнет! Я уж не говорю про "последовательное расположение".
 smile 

Динамический многомерный массив можно сделать только одним способом - через пересчет координат в одномерный индекс: i = z*W*H + y * w + x, где x,y,z - координаты, W - ширина (ось X), H - высота (ось Y)
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0705 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.