![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
MissusesBoost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 11. Boost.DLL
|
![]() |
Warning |
---|---|
Типичные ошибки и ошибки находятся в этом разделе. Пожалуйста, внимательно прочитайте, это сэкономит много времени на отладку! |
delete
>или<free()
>.catch(...)
>блоке.try{ autof=dll::import<int()>(path_to_pugin,"function"); f(); // `f` goes out of scope }catch(conststd::exception&e){ std::cerr<<e.what(); }>
f
>выходит из области действия, плагин разгружается, и ссылка на код исключения нарушается. Любая попытка использовать переменную исключения может использовать ссылку на свисание, что приводит к сбою сегментации. Исправьте свой код:<autof=dll::import<int()>(path_to_pugin,"function"); try{ f(); // `f` goes out of scope }catch(conststd::exception&e){ std::cerr<<e.what(); }>
voidfoo(){ shared_ptr<int>p; try{ autof=dll::import<shared_ptr<int>()>(path_to_pugin,"function"); p=f(); // `f` goes out of scope }catch(conststd::exception&e){ std::cerr<<e.what(); } std::cout<<*p; // crashes here }>
shared_ptr<int>
>. Он сохраняет стертый тип удаления, код для этого удаления находится в плагине. При уничтожении<p
>,<shared_ptr<int>
>предпринимаются попытки вызвать этот удалитель, однако плагин уже был выгружен и код для удалителя больше не доступен.any
>function
>shared_ptr
>std::type_index
>std::type_info
>std::exception_ptr
>std::unique_ptr<Base>
>Держащий<Derived
>тип плагинаСтатья Missuses раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 11. Boost.DLL может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Chapter 11. Boost.DLL ::
реклама |