Форум программистов, компьютерный форум CyberForum.ru

Не удается обменяться значением объекта между массивами указателей - C++

Восстановить пароль Регистрация
 
Gnetov
0 / 0 / 0
Регистрация: 07.07.2014
Сообщений: 18
24.11.2014, 14:37     Не удается обменяться значением объекта между массивами указателей #1
Добрый день.
Идея моей программы следующая. Необходимо создать сетку с квадратными ячейками для численных расчетов. Сетка состоит из узлов и ребрами между узлами, тем самым образуя ячейки. Размер сетки: по высоте - 100 узлов (или 99 ячеек), по ширине - 200 узлов (199 ячеек). У каждого узла свои координаты(сейчас пока не интересны) и свое значение в узле ("value"). Вот код на классы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class node
{public:
   node();
   ~node();
   int number;   //номер узла
   int a, b; //абсолютные координаты как в жизне
   double value;  //значение в узле
 private:
};
//-------------------Конструктор-----------------------
   node::node() {a=999999; b=999999; value=77777;};
//-------------------Деструктор-------------------------
   node::~node() {};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class edge
{public:
   edge();                //конструктор
   ~edge();          //деструктор
   node node1, node2; //узлы
   int nomer; //номер ребра: 0-верхнее, 1-правое, 2-нижнее, 3-левое
  private:
};
//-------------------Конструктор
   edge::edge()
      { };
//-------------------Деструктор------------------------------------------------
   edge::~edge() {};
В с++ сетку создаю в два этапа:
1. Создаю массив указателей на узлы
2. Создаю массив указателей на ребра
вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
//----------объявление ДВУХмерного массива указателей типа node-----------------
node **pMassivUzlov=new node * [100];  //выделяем память. Число узлов по высоте ограничено количеством 100
for (int stroka=0; stroka<100; stroka++)  
      {
      pMassivUzlov[stroka]=new node [200]; //выделяем память. Число узлов по ширине ограничено количеством 200
      };
int i=1; //промежуточная переменная
//----------заполнение массива указателей pMassivUzlov значениями---------------
for (int stroka=0; stroka<100; stroka++)
     {for (int stolb=0; stolb<200; stolb++)
           {
            pMassivUzlov[stroka][stolb].value=i; //присваиваем значение для "value"
            pMassivUzlov[stroka][stolb].a=i*10;  //формула для координаты "a"
            pMassivUzlov[stroka][stolb].b=i*100;  //формула для координаты "b"
            i++;
           };
     };
//----------объявление ТРЕХмерного массива указателей типа edge-----------------
edge ***pMassivReber=new edge ** [100];  //выделяем память. Число ячеек по высоте ограничено количеством 100
 
 for (int stroka=0; stroka<100; stroka++)
     {
         pMassivReber[stroka]=new edge *[200]; //выделяем память. Число ячеек по ширине ограничено количеством 200
         for (int stolb=0; stolb<200; stolb++)
             {
              pMassivReber[stroka][stolb]=new edge [4]; //выделяем память. Число ребер в ячейке ограничено 4-мя(сверху, справа, снизу, слева)
             };
     };
//----------заполнение массива указателей pMassivReber значениями---------------
     for (int stroka=0; stroka<100; stroka++)      //заполнение массива указателей значениями
     {for (int stolb=0; stolb<200; stolb++)
           {for (int rebro=0; rebro<4; rebro++)
               {if (rebro==0)  //присваиваем верхние узлы ребру 0(верхнее)
                        {
/*ошибка здесь*/         pMassivReber[stroka][stolb][rebro].node1=pMassivUzlov[stroka+1][stolb];  // узел 0
                         pMassivReber[stroka][stolb][rebro].node2=pMassivUzlov[stroka+1][stolb+1];  //узел 1
                         pMassivReber[stroka][stolb][rebro].nomer=0;
                         };
               if (rebro==1)  //присваиваем правые узлы ребру 1(правое)
                        {
                         pMassivReber[stroka][stolb][rebro].node1=pMassivUzlov[stroka+1][stolb+1];  // узел 1
                         pMassivReber[stroka][stolb][rebro].node2=pMassivUzlov[stroka][stolb+1];  //узел 2
                         pMassivReber[stroka][stolb][rebro].nomer=1;
                        };
               if (rebro==2)  //присваиваем нижние узлы ребру 2(нижнее)
                        {
                         pMassivReber[stroka][stolb][rebro].node1=pMassivUzlov[stroka][stolb+1];  // узел 2
                         pMassivReber[stroka][stolb][rebro].node2=pMassivUzlov[stroka][stolb];  //узел 3
                         pMassivReber[stroka][stolb][rebro].nomer=2;
                        };
               if (rebro==3)  //присваиваем левые узлы ребру 3(левое)
                        {
                         pMassivReber[stroka][stolb][rebro].node1=pMassivUzlov[stroka][stolb];  // узел 3
                         pMassivReber[stroka][stolb][rebro].node2=pMassivUzlov[stroka+1][stolb];  //узел 0
                         pMassivReber[stroka][stolb][rebro].nomer=3;
                        };
               }
           }
     };
delete[] pMassivUzlov;
delete[] pMassivReber;
По задумке, массив указателей на ребра должен извлекать данные из массива указателей на узлы.
Компилирует без проблем. А вот проблема возникает при выполнении: ошибка - на картинках, подсвечивает строку 35.
Не удается обменяться значением объекта между массивами указателейНе удается обменяться значением объекта между массивами указателей
Помогите разобраться в чем (или в ком) дело. Или дайте хотя бы наводку, где искать ответ. Спасибо
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2014, 14:37     Не удается обменяться значением объекта между массивами указателей
Посмотрите здесь:

. Использование указателей при работе с одномерными и двумерными массивами. C++
C++ Возврат объекта с полями-массивами в функцию
C++ Использование указателей при работе с одномерными массивами
C++ Использование указателей при работе с одномерными и двумерными массивами.
Указатель на массив указателей на объекты, передать в метод объекта C++
Использование указателей при работе с одномерными и двумерными массивами C++
C++ реализовать класс для работы с одномерными массивами указателей строк
C++ Сложность с константным значением (массив указателей на функцию)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,165
Завершенные тесты: 1
24.11.2014, 14:52     Не удается обменяться значением объекта между массивами указателей #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Gnetov Посмотреть сообщение
pMassivReber[stroka][stolb][rebro].node1=pMassivUzlov[stroka+1][stolb];
Когда stroka равно 99, чему равно stroka+1 ?????????????????
Gnetov
0 / 0 / 0
Регистрация: 07.07.2014
Сообщений: 18
24.11.2014, 15:45  [ТС]     Не удается обменяться значением объекта между массивами указателей #3
Цитата Сообщение от zss Посмотреть сообщение
Когда stroka равно 99, чему равно stroka+1 ?????????????????
ничему не равна! Спасибо, тему закрываем!
Yandex
Объявления
24.11.2014, 15:45     Не удается обменяться значением объекта между массивами указателей
Ответ Создать тему
Опции темы

Текущее время: 17:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru