![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
spumer |
![]() ![]()
Сообщение
#1
|
Студент ![]() Группа: Новичок Сообщений: 18 Регистрация: 28.3.2011 Пользователь №: 2546 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Здравствуйте.
При попытке подкинуть кривой хостнейм, программа вылетала с крит. ошибкой. Затем я начал отлавливать это исключение и пытаться завершить процесс более-менее спокойно. Но к сожалению это приводит к отказу приложения и система его закрывает.
|
|
|
![]() |
spumer |
![]() ![]()
Сообщение
#2
|
Студент ![]() Группа: Новичок Сообщений: 18 Регистрация: 28.3.2011 Пользователь №: 2546 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Все решилось довольно просто.
Как я понял, проблема возникала из-за использования моего недопиленного костыля:
Видимо внутри себя он(resolver.resolve) что-то делал такое с этими указателями, что вызывало исключительную ситуацию. Я посмотрел на конструкторы udp::resolver::query, и обнаружил: Цитата basic_resolver_query( const protocol_type & protocol, const std::string & host, const std::string & service, resolver_query_base::flags resolve_flags = address_configured); Внес исправления:
А в функции запроса, я сделал соответствующую проверку:
Возник еще вопрос. Если я пытаюсь перед выходом из функции удалить объект ptr - ошибка. Если я пытаюсь использовать boost::scoped_ptr - ошибка. Не получается освободить ресурсы. У меня конечно есть идея: создать boost::shared_ptr объект, поместить его в класс MainWindow, а в этой функции лишь .. ну вы поняли. Вобщем переложить работу с памятью для класса SE_Query на умный указатель и вынести его за пределы функции. Ну а если в целом, то все работает. Осталось лишь утечки памяти отловить. Забыл: перед выходом из функции удалить объект ptr Если пытаюсь удалить в блоке if(ptr->getLastError()), в конце самой функции конечно идет удаление этого объекта. |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 12.6.2025, 10:54 |