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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вернуть 4ерез функцию массив 
V
    Опции темы
kostay
Дата 1.10.2008, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



есть массив int a[8][8];
как мне его вернуть 4ерез функцию

Код

int _lauta[8][8]; //0,1,2
//potom zapolnjaem _lauta[i][j]...

int** Asema::getAsema(){
    return (int**)_lauta;
}


Код

int** tempAsema = a->getAsema();
//potom vot tak
tempAsema[i][j] == pelaaja


запускается но как дело доходит до вот етого выскакивает табли4ка the memory could not be read
PM MAIL   Вверх
Hroft
Дата 1.10.2008, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Скорее всего не выделена память в том месте матрицы, куда пишешь. Но вообще маловато и кода и инфы, хоть бы компилятор указал.
PM MAIL ICQ   Вверх
kostay
Дата 1.10.2008, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



mvs
PM MAIL   Вверх
mrbrooks
Дата 1.10.2008, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



kostay, помимо того что бы "вернуть" сам массив ты должен знать его параметры - ибо необходимо будет выделять память.
PM MAIL   Вверх
kostay
Дата 1.10.2008, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

int** tempAsema = a->getAsema(); 
    
//std::cout<<"qqq"<<tempAsema[0][0]<<"qqq"; вот тут она парит


Добавлено через 52 секунды
я знаю.. а как выделять?
PM MAIL   Вверх
mrbrooks
Дата 1.10.2008, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



Код

int **a(int n)
{
  int **arr;
  arr = new int * [n];
  for(int i = 0; i<n;i++) arr[i] = new int[i];
  // здесь заполняешь массив
  return arr;
}

int main()
{
 const int n = 8;
 int **s = a(n);
 //здесь выводишь данные если надо
 for(int i = 0; i<n;i++) delete s[i];
 delete [] s;
}


Это сообщение отредактировал(а) mrbrooks - 1.10.2008, 14:54
PM MAIL   Вверх
Rififi
Дата 1.10.2008, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



kostay, 
как мне его вернуть 4ерез функцию
вернуть массив нельзя. используй двойной указатель
PM MAIL   Вверх
Hroft
Дата 1.10.2008, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Глупость, конечно, но раз нет желания возиться с памятью напрямую, то, может, std::vector использовать? std::vector< std::vector<int> > точнее.
PM MAIL ICQ   Вверх
kostay
Дата 1.10.2008, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



решение брукса помогло... именно надо 4тоб не в векторе а в таблицы были зна4ения
PM MAIL   Вверх
Hroft
Дата 1.10.2008, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(kostay @  1.10.2008,  14:21 Найти цитируемый пост)
int _lauta[8][8]; //0,1,2
//potom zapolnjaem _lauta[i][j]...


... а это разве имелась в виду не выделение памяти??
PM MAIL ICQ   Вверх
J0ker
Дата 1.10.2008, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(kostay @ 1.10.2008,  14:21)
есть массив int a[8][8];
как мне его вернуть 4ерез функцию

Код

int _lauta[8][8]; //0,1,2
//potom zapolnjaem _lauta[i][j]...

int** Asema::getAsema(){
    return (int**)_lauta;
}


Код

int** tempAsema = a->getAsema();
//potom vot tak
tempAsema[i][j] == pelaaja


запускается но как дело доходит до вот етого выскакивает табли4ка the memory could not be read

совершенно правильно
ибо int [8][8] и int** - совершенно разные по реализации типы


--------------------
user posted image
PM MAIL   Вверх
Hroft
Дата 1.10.2008, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



J0ker, можно подробнее?
PM MAIL ICQ   Вверх
Fazil6
Дата 1.10.2008, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Hroft @  1.10.2008,  17:16 Найти цитируемый пост)
J0ker, можно подробнее? 

что подробнее? 
это совершенно разные вещи. Ничего общего и никакой связи между ними нет
PM MAIL   Вверх
J0ker
Дата 1.10.2008, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Hroft @ 1.10.2008,  17:16)
J0ker, можно подробнее?

type ptr[x][y] - размещает данные в непрерывном блоке и доступ к элементу [a][b] осуществляется (адресная арифметика): *(ptr+a*y+b)
если рассматривать type **ptr как двумерный массив, то размещение в памяти реализуется как одномерный массив УКАЗАТЕЛЕЙ на массивы type: ((ptr[a])[b]) == *(*(ptr+a)+b)
т.о. типы эти несовместимы принципиально. Ну а синтаксически это просто РАЗНЫЕ типы...


--------------------
user posted image
PM MAIL   Вверх
Hroft
Дата 2.10.2008, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(kostay @  1.10.2008,  14:21 Найти цитируемый пост)
int _lauta[8][8]; //0,1,2
//potom zapolnjaem _lauta[i][j]...

int** Asema::getAsema(){
    return (int**)_lauta;
}



Цитата(J0ker @  1.10.2008,  18:52 Найти цитируемый пост)
если рассматривать type **ptr как двумерный массив


В данном конкретном случаем мы рассматриваем не type **ptr как двумерный массив, а двумерный массив как type **ptr. Это - частный случай, когда указатели указывают не на произвольные места в памяти, а на соседние. Я ошибаюсь?
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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