SIGSEGV on dynamic_cast
SIGSEGV on dynamic_cast
我正在尝试将一个虚拟类dynamic_cast转换为另一个:
SomeClass::SomeFunc(_AListner& listner)
_BListner* listner = dynamic_cast<_BListner*>(&listner)
请注意,类_BListner派生自类_AListner。
但我在调试时遇到了这个错误:
SIGSEGV, Segmentaion fault.
<some address> in __dynamic_cast () from /usr/lib/libstdc++
SIGSEGV可以由dynamic_cast
触发,当:
- 对象有一个野生地址
- 对象的元数据(通常是vtable指针)已损坏
- 对象与表达式的静态类型不匹配
或
- 表达式没有多态类型(这意味着传递给
dynamic_cast
的表达式的静态类型,而不仅仅是它指向的对象的动态类型)
不过,编译器应该捕捉到最后一种情况。
您提到的_BListner是从_AListner派生而来的。你有像_CListner这样的第三方类吗?它也是从_AListner派生而来的?如果是这样,则允许向函数传递_CListner对象,但dynamic_cast失败并抛出std::bad_cast类型的异常。没有捕捉到该异常最终可能导致SIGSEGV。
只是一个假设,你肯定需要提供更多的信息。
相关文章:
- 如何理解C++标准N3337中的expr.const.cast子句8
- C++Cast运算符过载
- 在成员dynamic_bitset上使用 boost::from_block_range 时出错,但在本地dynamic
- C++类中的二维"dynamic"数组?
- 错误:"cast"未命名类型void setCastDescription(std::string
- 通过使用 const-cast 的非常量引用来延长临时的寿命
- "(void) cast"与功能有什么区别 "__attributes__"来沉默未使用的参数警告?
- protobuf in C++ with dynamic binding for google::protobuf::M
- 警告的原因是什么:"when type is in parentheses, array cannot have dynamic size"?
- C++:"Expected '(' for function-style cast or type construction"错误
- 为什么选择 g++ 给予者:"error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]"
- CUDA 错误:"dynamic initialization is not supported for __device__, __constant__ and __shared__ variabl
- Gtk+ g_signal_connect() 和 C++ lambda 会导致"invalid cast"错误
- 如何修复'The procedure entry point SDL_RWclose could not be located in the dynamic link library'
- Shared_ptr cast vs static_cast speed
- 在 iOS 上使用 Aruco 构建 OpenCV 时"Functional-style cast from id to double is not allowed"
- "The ordinal 344 could not be located in the dynamic link library"
- 覆盖 CAST 运算符(我认为它被称为向下转换)
- Dynamic Cast C++ Fail
- dynamic-cast-c++dynamic_cast错误处理