c++ - dynamic_cast 上的 SIGSEGV

标签 c++ 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++

最佳答案

dynamic_cast 可以在以下情况下触发 SIGSEGV:

  • 对象有一个乱地址
  • 对象的元数据(通常是 vtable 指针)已损坏
  • 对象与表达式的静态类型不匹配

  • 表达式没有多态类型(这意味着传递给 dynamic_cast 的表达式的静态类型,而不仅仅是它指向的对象的动态类型)。

虽然最后一种情况应该被编译器捕获。

关于c++ - dynamic_cast 上的 SIGSEGV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11773497/

相关文章:

C++ 如果 'something' 不为空并且不是 "0.0.0.0"

c++ - AVX2:分配给 __m256i 类成员时出现段错误

c++ - 是否可以使用非常量指针调用非常量函数,以及当两个 unique_ptr 指向同一个对象时程序将如何运行?

c++ - dynamic_cast 与在父类中公开虚函数 (C++)

c++ - 如果与指针一起使用,dynamic_cast 何时会抛出异常?

c++ - 为什么同一个对象方法被调用两次?

c++ - QGeoCodingManager 没有错误但没有结果

c++ - 通过无效指针访问静态成员 : guaranteed to "work"?

c++ - 如何通过交叉广播恢复接口(interface)

来自非成员函数的 C++ 虚拟继承