| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > вернуть 4ерез функцию массив |
| Автор: kostay 1.10.2008, 14:21 | ||||
| есть массив int a[8][8]; как мне его вернуть 4ерез функцию
запускается но как дело доходит до вот етого выскакивает табли4ка the memory could not be read |
| Автор: Hroft 1.10.2008, 14:33 |
| Скорее всего не выделена память в том месте матрицы, куда пишешь. Но вообще маловато и кода и инфы, хоть бы компилятор указал. |
| Автор: kostay 1.10.2008, 14:36 |
| mvs |
| Автор: mrbrooks 1.10.2008, 14:38 |
| kostay, помимо того что бы "вернуть" сам массив ты должен знать его параметры - ибо необходимо будет выделять память. |
| Автор: kostay 1.10.2008, 14:38 | ||
Добавлено через 52 секунды я знаю.. а как выделять? |
| Автор: mrbrooks 1.10.2008, 14:54 | ||
|
| Автор: Rififi 1.10.2008, 15:03 |
| kostay, как мне его вернуть 4ерез функцию вернуть массив нельзя. используй двойной указатель |
| Автор: Hroft 1.10.2008, 15:10 |
| Глупость, конечно, но раз нет желания возиться с памятью напрямую, то, может, std::vector использовать? std::vector< std::vector<int> > точнее. |
| Автор: kostay 1.10.2008, 15:13 |
| решение брукса помогло... именно надо 4тоб не в векторе а в таблицы были зна4ения |
| Автор: Hroft 1.10.2008, 15:39 |
... а это разве имелась в виду не выделение памяти?? |
| Автор: J0ker 1.10.2008, 17:12 | ||||||
совершенно правильно ибо int [8][8] и int** - совершенно разные по реализации типы |
| Автор: Hroft 1.10.2008, 17:16 |
| J0ker, можно подробнее? |
| Автор: Fazil6 1.10.2008, 17:19 |
что подробнее? это совершенно разные вещи. Ничего общего и никакой связи между ними нет |
| Автор: J0ker 1.10.2008, 18:52 | ||
type ptr[x][y] - размещает данные в непрерывном блоке и доступ к элементу [a][b] осуществляется (адресная арифметика): *(ptr+a*y+b) если рассматривать type **ptr как двумерный массив, то размещение в памяти реализуется как одномерный массив УКАЗАТЕЛЕЙ на массивы type: ((ptr[a])[b]) == *(*(ptr+a)+b) т.о. типы эти несовместимы принципиально. Ну а синтаксически это просто РАЗНЫЕ типы... |
| Автор: Fazil6 2.10.2008, 10:23 | ||
вот тебе и говорят, что двумерный массив и указатель на указатель - это совершенно разные вещи и рассматривать int _lauta[8][8] как int** нельзя.
|
| Автор: J0ker 2.10.2008, 17:08 | ||||||||
ошибаетесь type arr[x][y]; можно рассматрвать как type *ptr (однако синтаксически это разные типы и не могут быть присвоены напрямую) например:
результат:
т.е. при обращении к статическому двумерному массиву [x][y] смещение элемента [a][b] относительно начала вычисляется как (a*y+b) если же мы обращаемся через [a][b] к типу type**, то происходит следующее: 1. [a] трактуются как обращение к элементу a массива из type* - т.е. это массив указателей, и полученный элеент это УКАЗАТЕЛЬ 2. [b] трактуется как обращение к элементу b массива из type с базовым адресом полученным на предыдущем шаге иллюстрация: int arr[2][4]; arr[1][2]------------------------------------+ | V <[0][0],[0][1],[0][2],[0][3],[1][0],[1][1],[1][2],[1][3]> int **ptr; ptr[1][2] [1]---+ | V <[0],[1],[2],[3],........ | | | | | +--------------------------------+ | +---------------+ [2] | +-> <[0],[1],....> | V | +-> <[0],[1],[2],..> | +-> <[0],[1],......> |