这是C和C ++之间边界层上的一行函数。该函数获得了一堆void*
并将它们转换为应该存在的类型。发现错误:
MDLPeriph periph_dline = *static_cast<MDLPeriph*>(dline_periph);
确实,periph_dline应该是一个参考。让我感到困惑的是,这段代码在没有警告的情况下编译。此外,gdb
在检查此代码时会报告Internal GDB error.
并崩溃。
据我所知,上面的代码默认构造了一个MDLPeriph对象。然后使用新对象的复制构造函数从右侧分配值。
但是MDLPeriph没有默认构造函数!这怎么可能?
平台和工具:
Windown 7
yagarto的这个版本使用以下版本:binutils:2.23.1 gcc:4.7.2 newlib:1.20.0 gdb:7.5.1
(2012年12月22日,mifi)openocd o.7.0
答案 0 :(得分:5)
这里没有任何默认构造。
指针转换会导致任何dline_periph
个点被解释为MDLPeriph
个对象,而不会创建新对象;然后用于使用其复制构造函数复制初始化periph_dline
。