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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2009, 11:06   #1
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию Вопрос по структурам и динамической памяти.

мне надо создать масив содержащий структуры.

У меня вот код какой:

Код:
vec *fild[10][10];//vec это название структуры
конструктор

Код:
for(i=0;i<20;i++)
        {
        for(j=0;j<20;j++)
                {
                fild[i][j]=new (vec);
                fild[i][j].transparent=1;
                fild[i][j].x=i;
                fild[i][j].y=j;
                fild[i][j].sov=sqrt((player1.x-fild[i][j].x)*(player1.x-fild[i][j].x)+(player1.y-fild[i][j].y)*(player1.y-fild[i][j].y));
                
                fild[i][j].ox=(fild[i][j].x)/(fild[i][j].sov);
                fild[i][j].oy=(fild[i][j].y)/(fild[i][j].sov);
                }
        }
Вобщем он у меня все время какие-нибудь ошибки выдает


А если убрать звездочку при объевлении масива, то потом в ходе выполнения выдает, что доступ запрещен.

Что я не так делаю?

А как сделать тоже самое, только с динамическим масивом?
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 12.04.2009, 12:51   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Во-первых, замечу, что у вас двумерный массив 10x10, а в каждом из циклов вы идете от 0 до 20, то есть получается массив 20x20.

Дальше. Раз у вас указатель на массив, то вместо точек нужно использовать "->" для доступа к элементам.

То есть выглядеть будет как-то так:
Код:
for(i=0;i<10;i++)
        {
        for(j=0;j<10;j++)
                {
                fild[i][j]=new (vec);
                fild[i][j]->transparent=1;
                fild[i][j]->x=i;
                fild[i][j]->y=j;
                fild[i][j]->sov=2;

                fild[i][j]->ox=(fild[i][j]->x)/(fild[i][j]->sov);
                fild[i][j]->oy=(fild[i][j]->y)/(fild[i][j]->sov);
                }
        }
----------------------------------------
Цитата:
А как сделать тоже самое, только с динамическим масивом?
Видимо, как-то так:
Код:
 int M=10,N=10;
vec **fild;
int i,j;

fild = new vec*[M];
for(i=0;i<M;i++)
 fild[i] = new vec[N];

for(i=0;i<M;i++)
        {
        for(j=0;j<N;j++)
                {
                //fild[i][j]=new (vec);
                fild[i][j].transparent=1;
                fild[i][j].x=i;
                fild[i][j].y=j;
                fild[i][j].sov=2;

                fild[i][j].ox=(fild[i][j].x)/(fild[i][j].sov);
                fild[i][j].oy=(fild[i][j].y)/(fild[i][j].sov);
                }
        }

for(i=0;i<M;i++)
 delete[] fild[i];
delete[] fild;
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 12.04.2009, 14:10   #3
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Конструктор у вас внутри структуры написан? Если да, то вы совершенно неправильно пишете. Если весь код конструктора выполняется в основной программе, то правильно.
MaTBeu вне форума Ответить с цитированием
Старый 12.04.2009, 14:19   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

MaTBeu, лично мне показалось, что этот код в основной программе.
Ведь если это будет внутри конструктора класса (vec), то он не будет знать что такое fild[i][j].
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 12.04.2009, 18:20   #5
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Во, спасибо большое.

Так работает практически....

остались маленькие ошибки в самом алгоритме.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по динамическим структурам Sergy Win Api 2 10.05.2011 13:37
Помогите с динамической паматью! profi Помощь студентам 2 20.09.2008 15:50
Вставка по динамической памяти в Delphi Schakhmaev Помощь студентам 1 24.06.2008 01:27
ВОПРОС на счет блоков памяти и отслеживание за перемещением потока. Big Zee Свободное общение 7 21.04.2008 14:38