У меня есть кусок кода вида:Что может привести к сбою 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 не является нулевым (и если бы это было не проблема, не так ли?).
В чем причина динамического броска?
Если он не может отличить, он должен просто вернуть NULL no?
Хорошая интуиция! Другой поток освобождал «obj». – Barth 2008-11-11 07:39:54