pvh*_*987 6 c++ dynamic-cast segmentation-fault
假设我有一个A类和一个从A派生的B类.现在,我想使用dynamic_cast将const A*(称为"a")强制转换为B*(见下文).如果"a"确实是B*,那么我的结果对象指针应该没问题.如果"a"不是B*,那么我将得到NULL.
const A* a = new B();
const B* b = dynamic_cast<const B*>(a);
Run Code Online (Sandbox Code Playgroud)
出于某种原因,dynamic_cast操作会导致SEGFAULT.如果"a"不是NULL,怎么会发生?我想如果有任何转换问题,dynamic_cast会给我一个NULL指针,而不是SEGFAULT.如果我试图访问"b"并且动态转换不成功,我应该只获得一个SEGFAULT,对吧?我还没有尝试过访问"b".
那么,这怎么可能发生呢?在上面的代码中有什么可以导致dynamic_cast到SEGFAULT,我不知道吗?
提前致谢 :-)
编辑:通过GDB运行我的实际程序给出了这个输出:
Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ?? ()
(gdb) where
#0 0x0000000000000000 in ?? ()
#1 0x00007ffff6c0e612 in __cxxabiv1::__dynamic_cast (src_ptr=<optimized out>,
src_type=0x4fa6b0, dst_type=0x516bb0, src2dst=0)
at /var/tmp/portage/sys-devel/gcc-4.6.3/work/gcc-4.6.3/libstdc++-v3/libsupc++/dyncast.cc:61
Run Code Online (Sandbox Code Playgroud)
输出中的下一行只是指向我的代码中的行,我在那里进行动态转换.
Abh*_*jit 14
使用dynamic_cast时可能导致崩溃的原因
验证其中一种情况是否适用于您.