iht*_*wot 0 c++ arrays segmentation-fault
我试图输出共享基类的一组对象共有的函数,我遇到了一些困难.当对象被实例化时,它们存储在一个数组中,然后我尝试使用以下代码来执行此循环中所有对象的共同功能:
if ( truck <= v ) // all types of trucks
Run Code Online (Sandbox Code Playgroud)
vptr是一个对象数组,循环中的函数对所有对象都是通用的.代码编译得很好但是当我运行它时,它进入这个循环时会出现分段错误.我相信在这个循环中对第一个函数的调用是导致问题的原因.
这就是我在前一个循环中实例化对象的方法:
vptr[ i ] = new Vehicle( sn, pc );
Run Code Online (Sandbox Code Playgroud)
我还要提一下,对不起,我忘了从一开始就清楚,在这个数组中,每个对象都是不同的类.它们都共享一个基类,但它们是该类的派生对象.很抱歉忘记了可能很重要的信息.
谢谢nmr
小智 6
dynamic_cast如果对象不是指定的类型0,NULL则指针类型返回空指针(aka ,).您必须在使用之前检查指针,或使用引用类型(在失败时抛出异常):
if (Truck* p = dyanmic_cast<Truck*>(vptr[i])) {
// use the pointer here
}
else {
// vptr[i] doesn't point to a Truck
}
Run Code Online (Sandbox Code Playgroud)
(注意正确键入的指针对你来说是一个很好的效果,当你可以提高可读性时,可以利用它.)