Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 07.07.2014
Сообщений: 18
1

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

24.11.2014, 14:37. Показов 502. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.
Идея моей программы следующая. Необходимо создать сетку с квадратными ячейками для численных расчетов. Сетка состоит из узлов и ребрами между узлами, тем самым образуя ячейки. Размер сетки: по высоте - 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.
Не удается обменяться значением объекта между массивами указателей
Не удается обменяться значением объекта между массивами указателей

Помогите разобраться в чем (или в ком) дело. Или дайте хотя бы наводку, где искать ответ. Спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.11.2014, 14:37
Ответы с готовыми решениями:

Как обменяться данными между формами?
Добрый день! Имеется главное окно, из него вызывается вторичное окно с параметром. Это вторичное...

Можно ли обменяться значениями между EXE файлами
Вопрос у меня такой, я хочу изготовить exe-шник который бы принимал тот или иной параметр из...

Использование указателей с многомерными массивами
как в программе воспользоваться указателями? пишу по конспекту, но что то вообще ничего не...

Использование указателей при работе с массивами
Здесь двумерный массив, теперь надо написать его с использованием указателей. У меня не...

2
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
24.11.2014, 14:52 2
Цитата Сообщение от Gnetov Посмотреть сообщение
pMassivReber[stroka][stolb][rebro].node1=pMassivUzlov[stroka+1][stolb];
Когда stroka равно 99, чему равно stroka+1 ?????????????????
1
0 / 0 / 0
Регистрация: 07.07.2014
Сообщений: 18
24.11.2014, 15:45  [ТС] 3
Цитата Сообщение от zss Посмотреть сообщение
Когда stroka равно 99, чему равно stroka+1 ?????????????????
ничему не равна! Спасибо, тему закрываем!
0
24.11.2014, 15:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.11.2014, 15:45
Помогаю со студенческими работами здесь

Небезопасный код с использованием указателей (операции с массивами)
Задан стековый массив А(N). Получить из него массив В(M), содержащий элементы массива А, кратные...

Использование указателей для работы с массивами данных
С клавиатуры введено длинное беззнаковое целое число. Образовать массив из цифр этого числа. Затем...

Использование указателей при работе с одномерными массивами
Реализовать на Си. Даны натуральное число n, действительные числа a1,...,an. Если...

Сложность с константным значением (массив указателей на функцию)
Всем привет. Прошу помощи. Задача такая: Реализовать функцию сортировки методом вставки. В...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru