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

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

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

Студворк — интернет-сервис помощи студентам
Добрый день.
Идея моей программы следующая. Необходимо создать сетку с квадратными ячейками для численных расчетов. Сетка состоит из узлов и ребрами между узлами, тем самым образуя ячейки. Размер сетки: по высоте - 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.11.2014, 14:37
Ответы с готовыми решениями:

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

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

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

2
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,239
24.11.2014, 14:52
Цитата Сообщение от 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  [ТС]
Цитата Сообщение от zss Посмотреть сообщение
Когда stroka равно 99, чему равно stroka+1 ?????????????????
ничему не равна! Спасибо, тему закрываем!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.11.2014, 15:45
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru