3 / 3 / 2
Регистрация: 19.02.2014
Сообщений: 142
|
||||||||||||||||||||||||||
1 | ||||||||||||||||||||||||||
Некоректное использование указателей15.10.2017, 13:12. Показов 913. Ответов 5
Метки нет (Все метки)
День добрый! У меня есть класс Burnes_Hut, который содержит в себе не который массив (dCells3D) и деревовидный граф (dGraphTree), который задаётся рёбрами с двумя указателями - *Parent и *Child. Задача состоит в том, чтобы при создании новой ячейки (dCells3D) создавалось ребро, ссылается на предыдущую ячейку и на новосозданную. Вычисления рекурсионные: создаётся одна корневая ячейка (void dBarnes_Hut :: CreateFirstCell()), потом делится, затем эти новые ячейки тоже делятся и т.д. (void dBarnes_Hut :: CreateCellsRecursion(const dCell3D& ParentCellP)). Для простоты процесс создания новых ячеек опустил, так как не в этом проблема. Дело в том, что при создании первой ячейки в графе появляется указатель Root, по которому к первой ячейке можно обратиться, но если добавить хотя бы один элемент массив с ячейками, указатель Root теряет размер ячейки (переменная double Size), но не теряет координаты. В чём может быть проблема?
0
|
15.10.2017, 13:12 | |
Ответы с готовыми решениями:
5
Работа с двумерными числовыми массивами. Использование указателей. Использование функций пользователя. использование указателей Использование указателей Использование указателей |
3 / 3 / 2
Регистрация: 19.02.2014
Сообщений: 142
|
||||||
15.10.2017, 13:50 [ТС] | 2 | |||||
UPD: Сделал проще пример, который имеет такую же ошибку: есть массив с одним элементом и указатель на элемент, затем я использую emplace_back() и добавляю новый элемент, после чего указатель начинает указывать на ноль. Я так подозреваю, что это из-за копирования массива при вызове emplace_back(). Нужно ли заново привязывать указатель, или есть иные варианты?
0
|
284 / 232 / 114
Регистрация: 07.09.2016
Сообщений: 584
|
|
16.10.2017, 00:22 | 4 |
Сообщение было отмечено Devilox как решение
Решение
у std::vector итераторы и указатели становятся невалидными после перераспределения внутреннего массива.
у std::list итераторы и указатели валидные после вставок. у std::deque - после вставок в конец\начало указатели живие, про итераторы не помню. а так же не знаю, прописано ли эта валидность\невалидность в стандарте. поэтому поэтому про deque мог и наврать.
1
|
3 / 3 / 2
Регистрация: 19.02.2014
Сообщений: 142
|
|
16.10.2017, 00:27 [ТС] | 5 |
Понял, спасибо! Поменяю вектор на лист.
0
|
Любитель чаепитий
|
|
16.10.2017, 06:36 | 6 |
del
0
|
16.10.2017, 06:36 | |
16.10.2017, 06:36 | |
Помогаю со студенческими работами здесь
6
Использование указателей использование указателей использование указателей Использование указателей Использование ссылок и указателей Использование указателей на функции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |