什么原因可能导致dynamic_cast崩溃? [英] What could cause a dynamic_cast to crash?

查看:2595
本文介绍了什么原因可能导致dynamic_cast崩溃?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一段代码看起来像这样:

I have a piece of code looking like this :

TAxis *axis = 0;
if (dynamic_cast<MonitorObjectH1C*>(obj))
   axis = (dynamic_cast<MonitorObjectH1C*>(obj))->GetXaxis();

有时会崩溃:

Thread 1 (Thread -1208658240 (LWP 11400)):
#0  0x0019e7a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2
#1  0x048c67fb in __waitpid_nocancel () from /lib/tls/libc.so.6
#2  0x04870649 in do_system () from /lib/tls/libc.so.6
#3  0x048709c1 in system () from /lib/tls/libc.so.6
#4  0x001848bd in system () from /lib/tls/libpthread.so.0
#5  0x0117a5bb in TUnixSystem::Exec () from /opt/root/lib/libCore.so.5.21
#6  0x01180045 in TUnixSystem::StackTrace () from /opt/root/lib/libCore.so.5.21
#7  0x0117cc8a in TUnixSystem::DispatchSignals ()
   from /opt/root/lib/libCore.so.5.21
#8  0x0117cd18 in SigHandler () from /opt/root/lib/libCore.so.5.21
#9  0x0117bf5d in sighandler () from /opt/root/lib/libCore.so.5.21
#10 <signal handler called>
#11 0x0533ddf4 in __dynamic_cast () from /usr/lib/libstdc++.so.6

我没有线索为什么它崩溃。 obj 不为null(如果它是不会是一个问题,会吗?)。

I have no clue why it crashes. obj is not null (and if it was it would not be a problem, would it ?).

动态转换可能会导致崩溃的原因是什么?

What could be the reason for a dynamic cast to crash ?

如果它不能转换,它应该只返回NULL否?

If it can't cast, it should just return NULL no ?

推荐答案

崩溃的一些可能原因:


  • obj 对象与非多态类型(类或结构没有虚拟方法或基本类型)。

  • obj 指向已释放的对象。

  • obj 指向未映射的内存或已映射的内存,

  • obj 指向具有多态类型的对象,但是

  • obj points to an object with a non-polymorphic type (a class or struct with no virtual methods, or a fundamental type).
  • obj points to an object that has been freed.
  • obj points to unmapped memory, or memory that has been mapped in such a way as to generate an exception when accessed (such as a guard page or inaccessible page).
  • obj points to an object with a polymorphic type, but that type was defined in an external library that was compiled with RTTI disabled.

并非所有这些问题都会导致所有情况下的崩溃。

Not all of these problems necessarily cause a crash in all situations.

这篇关于什么原因可能导致dynamic_cast崩溃?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆