IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Динамическая память С++ (https://www.imho.ws/showthread.php?t=15456)

Zneff 12.11.2002 05:08

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

Zneff 12.11.2002 08:03

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

helldomain 12.11.2002 08: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 09:46

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

helldomain 12.11.2002 10: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 07:35

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

sanchos 13.11.2002 23: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 01: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 20:01

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

Zneff 14.11.2002 23:34

Цитата:

Как писал SaNChos
Я не компилировал, а на память писал :) Короче, я думаю, что Zneff'у понятно будет :)
Ага. У меня даже получилось :)

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

sanchos 15.11.2002 19:10

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


Часовой пояс GMT +4, время: 08:59.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.