首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >什么会导致dynamic_cast崩溃?

什么会导致dynamic_cast崩溃?
EN

Stack Overflow用户
提问于 2008-11-10 16:48:26
回答 4查看 15.2K关注 0票数 18

我有一段代码,如下所示:

代码语言:javascript
复制
TAxis *axis = 0;
if (dynamic_cast<MonitorObjectH1C*>(obj))
   axis = (dynamic_cast<MonitorObjectH1C*>(obj))->GetXaxis();

有时它会崩溃:

代码语言:javascript
复制
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 no?

EN

回答 4

Stack Overflow用户

发布于 2008-11-10 17:30:59

我建议对这段代码使用不同的语法。

代码语言:javascript
复制
if (MonitorObjectH1C* monitorObject = dynamic_cast<MonitorObjectH1C*>(obj))
{
    axis = monitorObject->GetXaxis();
}

如果其他线程正在删除monitorObject指向的内容,或者如果obj是疯狂的垃圾,你仍然可能崩溃,但至少你的问题不再是与强制转换相关的,并且你不会做两次dynamic_cast。

票数 11
EN

Stack Overflow用户

发布于 2008-11-10 17:01:00

如果强制转换失败,并且您正在向指针强制转换,则dynamic_cast将返回0,这是您的情况。问题在于,您要么在代码中早先损坏了堆,要么没有启用rtti。

票数 2
EN

Stack Overflow用户

发布于 2008-11-10 17:12:35

是否确定已正确定义了'obj‘的值?

例如,如果它是未初始化的(即随机的),我可以看到它会导致崩溃。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/278429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档