| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > queue указателей |
| Автор: Metalex 19.11.2011, 12:41 | ||
| Доброго времени суток! У меня есть стандартная очередь из указателей на TTreeNode (не суть важно). Я заношу указатели на узлы дерева в очередь, затем извлекаю и вывожу в файл. Во вот дела. Где-то при этих манипуляциях теряются те указатели, которые храняться в очереди, поэтому, когда я сохраню в файл - вместо имен узлов дерева вижу на форме иероглифы. Я думал, что это при операции очереди pop(), но нашел инфу, что нет - деструктор поп не вызывает. Тогда я попробовал сделать очередь из указателей на эти указатели. Вроде бы логично - и ничего не должно потеряться. Но! Ничего не получается - при извлечении из очереди элемента - у него пустые поля..... Вот участки кода, которые я описал:
Что я делаю не так? |
| Автор: Metalex 19.11.2011, 14:11 |
| math64, да, а как с этим бороться? |
| Автор: math64 19.11.2011, 15:13 |
| Храни в очереди простые указатели, зачем двойные ? |
| Автор: Metalex 19.11.2011, 15:18 | ||
Я же написал, что тогда в дереве будут иероглифы (Builder, компонент TTreeVeiw). И если написать такую штуку
То второй шоу месседж выбивает, т.к. где-то этот указатель (который я хранил в очереди) затерся. И так для всех узлов. |
| Автор: math64 19.11.2011, 16:44 |
| Ты добавлял/удалял узлы из дерева? Тогда да, память под узлы дерева могли выделиться заново, но в етом случае доп. уровень указателей не поможет, и как мне помнится, в Билдере этого не происходит Для очереди указатель - всё равно, что целое соответствующего размера, она его портить не должна. И вообще, зачем нужна очередь? В TraverseTreeOnSaveTree передай вместо ссылки на очередь ссылку на ostream и выводи узлы непосредственно там. |