PDA

Просмотр полной версии : Динамическая память С++


Zneff
12.11.2002, 04:08
У меня проблема...
Мне нужно занести трехмерный массив массив вида int massiv[10][3][2] в динамическую память, причем обязательно через оператор New (C++)

Zneff
12.11.2002, 07:03
Вся фишка в вот в чем:
в классе есть массив
int coord[10][2][3];
потом в конструкторе объявляю
coord = new int[10][2][3];
выдает ошибку
Lvalue required

helldomain
12.11.2002, 07:25
Prawilno. Slewa u tebya stoit gotowij massiw, a ne tipizirowannij pointer.

Prosteischij primer:

typedef myarray int coord[10][2][3];
myarray * mypointer=new int[10][2][3];

Zneff
12.11.2002, 08:46
а можно чуть по подробнее? просто это задание по ооп в универе...
там переменная должна быть в классе, а я че то не совсем понимаю, как приспособить эту схему туда :(

helldomain
12.11.2002, 09:55
Gi, nu tak sozdaesh klass, wnutr wpisiwaesh etu peremennuju (kak ti i pisal) i s pomoshju new konstruiruesh objekt klassa.

Zneff
13.11.2002, 06:35
Не мог бы ты написать тут немного в коде, плз?
Просто как я не мучался сегодня - у меня так и не получилось ничего... :баран: Может быть просто с моими манипуляторами что-то не так :idontnow:

sanchos
13.11.2002, 22:22
int *pMass;
pMass = new int[10][3][2];
int i, j, h;
for(i=0; i<10; i++)
for(j=0; j<3; j++)
for(h=0; h<3; h++)
{
// ... - заполнение массива
printf("%2i", pMass[i][j][h]);
}
delete pMass[];

Или же без new мона просто открыть цикл, по выходу из которого память, используемая на объявленные в нем переменные, атоматически сама удалится :)
К примеру:

int flag = 1;
if(flag)
{
int mass[10][3][2];
// делаешь все что нужно
}
// а вот здесь при вызове элементов массива mass,
// компиляторвыдаст ошибочку, тк их просто в памяти нет

Вроде, как помнится, так должно работать :)

alexey_ma
14.11.2002, 00:29
Не откомпилируется.
Нужно так:

int (*pMass) [3][2];
pMass = new int[10][3][2];
int i, j, h;
for(i=0; i<10; i++)
for(j=0; j<3; j++)
for(h=0; h<3; h++)
{
// ... -
printf("%2i", pMass[i][j][h]);
}
delete [] pMass;


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

sanchos
14.11.2002, 19:01
Я не компилировал, а на память писал :) Короче, я думаю, что Zneff'у понятно будет :)

Zneff
14.11.2002, 22:34
Как писал SaNChos
Я не компилировал, а на память писал :) Короче, я думаю, что Zneff'у понятно будет :)

Ага. У меня даже получилось :)

Большое спасибо всем! :jump:

sanchos
15.11.2002, 18:10
Почему "даже"? Надо верить в свои силы, и все получится :)
Удачи :)