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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.08.2008, 12:29   #1
sand
Новичок
Джуниор
 
Регистрация: 05.08.2008
Сообщений: 1
По умолчанию Работа с динамическим массивом

Есть такой код в функции main
Код:

Код:
int** Heights;
int result = Allocate(int** Heights);


далее вызывается функция создания этого массива Allocate
Код:

// создаем динамический двумерный массив 10x10
int Allocate(int **Heights)
{
   Heights = new int*[10];
   for(int i=0;i<10;i++)
   {
      Heights[i] = new int[10]
    }
}
Так вот после до и после вызова Allocate Heights равен NULL. Наверняка это связано с передачей параметров по ссылке/значению, но я в этом что-то не очень разбираюсь с двумерными массивами. Мне нужно в дальнейшем, после вызова Allocate работать с этим массивом, чтоб он был не NULL улыбка Как нужно передавать его в Allocate?

Последний раз редактировалось merax; 05.08.2008 в 19:25.
sand вне форума Ответить с цитированием
Старый 05.08.2008, 19:32   #2
merax
Форумчанин
 
Регистрация: 27.12.2006
Сообщений: 955
По умолчанию

**- наверное это в вашем понятии обозначение двумерного массива да?

Пы.Сы. Редкостный бред. Читайте книги.
merax вне форума Ответить с цитированием
Старый 19.08.2008, 20:59   #3
LliriK_DFN
Новичок
Джуниор
 
Регистрация: 19.08.2008
Сообщений: 2
По умолчанию

Да... К сожалению в этом исходном коде много даже простейших ошибок...
Анализу он не поддаётся.
LliriK_DFN вне форума Ответить с цитированием
Старый 22.08.2008, 12:48   #4
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Значит так. Все по порядку.
Ошибка первая и, пожалуй, главная. Смотри, ты в функции Allocate хочешь создать двумерный массив и вернуть его. Но суть в том, что вернуть ты должен указатель на указатель тоесть **, а ты возвращаешь просто int. А потом еще и хочешь присвоить int-значению массив, да еще и к тому же двумерный.
Решение:
Функция приобретает вид
Код:
int **Allocate();            //это прототип
Параметры ей не нужны. Она просто будет возвращать указатель, а ты его будешь присваивать своему int **Heights. Внутри ее будет создаваться каждый раз новый указатель (ну там или в начале функции его можно на всякий пожарный занулять). И в конце функции будет return tmp, где tmp - указатель (двойной).
Короче код будет где-то таким:
Код:
int **Heights;
Heights = Allocate();

int Allocate()
{
   int **tmp=NULL;
   tmp = new int*[10];
   for(int i=0;i<10;i++)
   {
      tmp[i] = new int[10];
    }

    //и вот тут неплохо бы сделать весь массив нулями (ну так, для дальнейшей отладки)

   for(int i=0; i<10; i++)
   for(int j=0; j<10; j++)
   {
      tmp[i][j] = 0;
   }
    return tmp;   
}
Ну вобщем приблизительно вот так. Дальше сам уж думай, как его тебе нужно использовать.
MaTBeu вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с динамическим массивом dee_lv Помощь студентам 7 09.06.2008 16:58
Помогите с динамическим массивом!!!! vish25 Помощь студентам 2 31.05.2008 19:20
Работа с динамическим массивом и его елементами Padovan Паскаль, Turbo Pascal, PascalABC.NET 2 21.05.2008 20:55
проблема с динамическим массивом romeo007.06 Общие вопросы Delphi 1 03.04.2008 20:18
проблема с динамическим массивом kommunist Помощь студентам 6 11.11.2007 21:18