在哪些情况下,基类到派生类的c风格强制转换可能导致崩溃

In what cases c-style casting of base class to derived may cause crash

本文关键字:转换 风格 崩溃 情况下 基类 派生      更新时间:2023-10-16

我正在调查随机崩溃(SIGBUS),并试图找出可能损坏调用崩溃方法的指针的原因。我发现这个指针在c++代码中使用C风格的转换从它的基类中强制转换。所以,我想知道在什么情况下,这样的强制转换可能会导致崩溃,并试图了解它是否是我的问题的根本原因。

类型转换本身不会导致崩溃(显然…)但是,如果您强制转换的子对象实际上不是子对象,则它可能会试图从未分配或错误的位置调用函数并崩溃。

例如,A, B,C继承A,如果B的大小比C大得多。如果将分配给C的内容强制转换为B,就会导致程序崩溃。这可以用dynamic_cast<SomeType>(ptr);来解决然后询问结果是否为nullptr