Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Куда-то пропадают данные по указателям

7
02 июля 2015 года
@pixo $oft
3.4K / / 20.09.2006
Есть код (см. вложение), в котором я пользуюсь параметром lParam структуры TVINSERTSTRUCT для добавления дополнительной информации к каждому узлу дерева. Структуру хранения данных вы можете увидеть в заголовочном файле. В lParam передаётся адрес структуры NetStrings. Ключевыми моментами в коде будут процедура EnumSubtree(), начиная со строки 27, и обработка WM_NOTIFY (TVN_SELCHANGED), начиная со строки 123.
Суть в том, что я заполняю NetStrings, конструируя их из данных, полученных от структуры NETRESOURCE. Данные там каждый раз затираются потом, но string ведь создаёт объект как копию, верно? Значит, проблема не здесь.
Когда наступает пора посмотреть какие-то данные из выбранного узла дерева, я получаю его lParam, преобразую его в NetStrings и… вот тут-то начинается самое интересное. Куда-то пропадают данные! То неверные указатели там, то ещё какая-то байда. Причём, если я при заполнении обращу внимание на какой-то lParam, который будет иметь значение 123456, например, то при попытке запросить данные в WM_NOTIFY он будет иметь то же самое значение, но там будет уже совсем не то, что я ожидал.
В чём причина такого странного поведения и как мне её исправить? Не хочется переписывать всё так, чтобы приходилось в дереве структур искать по HTREEITEM выделенного элемента.
Прикрепленные файлы:
10 Кб
Загрузок: 734
10
02 июля 2015 года
Freeman
3.2K / / 06.03.2004
А где вызываются конструкторы NetStrings.Provider, NetStrings.LocalName и NetStrings.Comment?
7
02 июля 2015 года
@pixo $oft
3.4K / / 20.09.2006
В EnumSubtree() они инициализируются, т.е. не будет такого, чтобы в push_back() попала NetStrings с неинициализированными членами (а даже если и так, то по умолчанию там пустые строки). Ну и суть-то не в этом — если посмотреть TreeItems, то там всё будет проинициализировано, ВСЁ! А указатели в lParam всё равно в какую-то байду превращаются…
7
14 июля 2015 года
@pixo $oft
3.4K / / 20.09.2006
Вот финальная версия. Я просто уже не знаю, что делать — пока сохраняю, по адресам всё нормально доступно, да и векторы я не тереблю. Но стоит попытться получить сохранённое значение по указателю…
Прикрепленные файлы:
10 Кб
Загрузок: 714
326
14 июля 2015 года
sadovoya
757 / / 19.11.2005
Может я туплю, но здесь:
 
Код:
NetStrings *ns=(NetStrings*)nmtv.itemNew.lParam;
                SetDlgItemText(hDlg,LblProvider,("Провайдер: "+ns->Provider).c_str());

вы-же ns не создали. NetStrings ведь класс, а не POD структура. Или я что-то не вижу.. Сильно не вникал.
7
15 июля 2015 года
@pixo $oft
3.4K / / 20.09.2006
Да я уже разобрался, непонятно только, в чём дело было :D Переписал через forward_list и ещё кое-что изменил. А члены там нормально возвращаются, это же указатель на существующий объект.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог