在什么情况下派生的基类c风格的转型可能会导致崩溃

问题描述:

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

+2

我们怎么可能知道没有看到您的代码? – antonijn 2013-03-24 10:34:01

+0

我一般会问,在哪种情况下会损坏指针。不幸的是,由于某些原因,我无法显示代码。 – mol 2013-03-24 10:37:30

+1

为了扩展Antonijn的评论,我想我们可以尝试列出所有可能出错的东西,当你尝试在答案中执行无效投射时,但我们会整天呆在这里,而这完全无益给大家。这会容易得多,如果你发布了违规代码,你会更有可能得到有用的答案。 – 2013-03-24 10:38:35

铸造本身不会导致崩溃(很明显..) 但是,如果你铸造了一个不是真正的小孩的对象,它会试图从一个未分配或一个错误的地方和崩溃..

例如,我们有A和B,C谁继承了A,如果B的大小比C ..更大,如果您将C分配给B,则可以崩溃。 这可以使用dynamic_cast<SomeType>(ptr); 解决,然后询问结果是不是nullptr