我正在尝试将一个虚拟类 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++
最佳答案
dynamic_cast
可以在以下情况下触发 SIGSEGV:
- 对象有一个乱地址
- 对象的元数据(通常是 vtable 指针)已损坏
- 对象与表达式的静态类型不匹配
或
- 表达式没有多态类型(这意味着传递给
dynamic_cast
的表达式的静态类型,而不仅仅是它指向的对象的动态类型)。
虽然最后一种情况应该被编译器捕获。
关于c++ - dynamic_cast 上的 SIGSEGV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11773497/