gpt4 book ai didi

c++ - dynamic_cast 上的 SIGSEGV

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:31:12 25 4
gpt4 key购买 nike

我正在尝试将一个虚拟类 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com