What could cause a dynamic_cast to crash?(什么可能导致 dynamic_cast 崩溃?)
本文介绍了什么可能导致 dynamic_cast 崩溃?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一段代码如下:
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 不为空(如果是这样就没有问题,是吗?).
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指向具有多态类型的对象,但该类型是在禁用 RTTI 的情况下编译的外部库中定义的.
objpoints to an object with a non-polymorphic type (a class or struct with no virtual methods, or a fundamental type).objpoints to an object that has been freed.objpoints 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).objpoints 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 崩溃?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
织梦狗教程
本文标题为:什么可能导致 dynamic_cast 崩溃?
基础教程推荐
猜你喜欢
- GDB 显示调用堆栈上函数地址的当前编译二进制文 2022-09-05
- 如果我为无符号变量分配负值会发生什么? 2022-01-01
- 非静态 const 成员,不能使用默认赋值运算符 2022-10-09
- 为什么派生模板类不能访问基模板类的标识符? 2021-01-01
- 为什么 RegOpenKeyEx() 在 Vista 64 位上返回错误代码 2021-01-01
- 为什么 typeid.name() 使用 GCC 返回奇怪的字符以及如 2022-09-16
- CString 到 char* 2021-01-01
- 我应该对 C++ 中的成员变量和函数参数使用相同的名称吗? 2021-01-01
- 通过引用传递 C++ 迭代器有什么问题? 2022-01-01
- 初始化列表*参数*评估顺序 2021-01-01
