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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> трёхмерный динамический массив, освобождение памяти 
:(
    Опции темы
Andrey44
Дата 8.7.2007, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код


int    ***intdataArray3D = NULL;

intdataArray3D = new int**[d1];
for(int i = 0; i < d1; i++){
    intdataArray3D[i] = new int*[d2];
    for(int j = 0; j < d2; j++)
        intdataArray3D[i][j] = new int[d3];
}

if(intdataArray3D!=NULL){
    for(int i = 0; i < d1; i++){
        for(int j = 0; j < d2; j++)
            delete [] intdataArray3D[i][j];
        delete [] intdataArray3D[i];
    }
    delete [] intdataArray3D;
}


Всем добрый день.

Подскажите пожалуйста правильно ли я создаю трёхмерный массив, а патом освобождаю память.


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
archimed7592
Дата 8.7.2007, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



Правильно.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Andrey44
Дата 8.7.2007, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Тогда подскажите как передать в функцию этот трёхмерный массив.

Есть функция:
Код

int intdataArray3D[5][5][5];

H5Dread(dataset, H5T_NATIVE_INT, memspace, dataspace, H5P_DEFAULT, (void*)intdataArray3D);

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

Но если динамический массив:
Код

nt ***intdataArray3D;

for(int i = 0; i < d1; i++){
    intdataArray3D[i] = new int*[d2];
    for(int j = 0; j < d2; j++)
        intdataArray3D[i][j] = new int[d3];
}

H5Dread(dataset, H5T_NATIVE_INT, memspace, dataspace, H5P_DEFAULT, intdataArray3D);


Программа слетает с ошибкой. smile 


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
archimed7592
Дата 8.7.2007, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



Кхм... не вижу прототипа H5Dread... а мысли читать пока не научился...

Но, по аналогии тебе нужен динамический трехмерный массив со статическими размерностями...

Код

int n = 100;
int (*arr)[5][5] = new int [n][5][5];

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


Добавлено через 1 минуту и 5 секунд
Да, и чему у тебя равны d1, d2, d3?


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Andrey44
Дата 8.7.2007, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



H5Dread это функция из библиотеки для работы с файлами формата HDF5 smile 

d1, d2, d3 - это я из файла получаю размерность массива так-что заранее я не знаю
размеры массива. smile 


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
archimed7592
Дата 8.7.2007, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



Цитата(Andrey44 @  8.7.2007,  16:23 Найти цитируемый пост)
H5Dread это функция из библиотеки для работы с файлами формата HDF5 smile 

А ты не будешь так любезен и не приведёшь здесь прототип этой ф-ции или ссылку на её документацию?
Если конечно хочешь, чтобы тебе помогли...


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Andrey44
Дата 8.7.2007, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Ссылка на описание функции.

H5dRead

Там много интересного. smile 


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
archimed7592
Дата 8.7.2007, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



Ей нужен буфер.
Выделять так:
Код

int *arr = new int [d1 * d2 * d3];

Использовать этот массив можно потом так:
Код

int &get_item(int *arr, int i1, int i2, int i3)
{
    return arr[i1 * d2 * d3 + i2 * d3 + i3];
}

Или можно написать обёртку, которая будет себя вести подобно такому массиву.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Andrey44
Дата 8.7.2007, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Спасибо сейчас попробую. smile 

Но почему всё работает с нединамическим трёхмерным массивом?


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
bsa
Дата 8.7.2007, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Andrey44 @ 8.7.2007,  19:37)
Спасибо сейчас попробую. smile 

Но почему всё работает с нединамическим трёхмерным массивом?

Потому что организация памяти (структура массива) другая.
PM   Вверх
Andrey44
Дата 8.7.2007, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Спасибо, archimed7592 вроде-бы всё работает. smile 

Получается, что трёхмерный динамический там и не нужен. smile 


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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