gpt4 book ai didi

c++ - Dynamic_cast 使我的程序崩溃

转载 作者:行者123 更新时间:2023-12-03 06:07:22 26 4
gpt4 key购买 nike

在我的程序中,我有一个基类(ship)和四个派生类(piratemercantilerepairing, exploring) 和 repairing 的成员函数中我想知道 ship * 指向的对象是否属于 类型>盗版以便能够处理这种情况。

因此,在该成员函数中,我有以下 if:

ship * shp;

shp = map[i][j]->getShip(); //random initialization of shp

if( (dynamic_cast<pirate *>(shp)) == NULL) // <- program doesn't enter here
{ . . . } // while it should

但在运行时我注意到,有时即使 shp 指向非盗版,程序也不会输入 if对象(例如探索)。

因此,我尝试通过编写以下代码来查看 if 中该 boolean 值的结果:

pirate *prt;
bool test;
if(map[i][j]->getShip()!=0){
prt = dynamic_cast<pirate *>(shp); // <- program crashes here
test = ( prt == NULL );
cout<<test<<endl;
}

但是在编译并尝试运行它之后,程序在使用 dynamic_cast 时崩溃了。

因此,dynamic_cast 可能无法正常工作,这就是它没有在前面的代码中输入 if 的原因。

请注意,我在程序的其余部分中使用了与 dynamic_cast 相同的方法来找出对象的类型,并且它工作正常。

为什么会发生这种情况?

提前致谢。

最佳答案

正如您已经发现的,原因是未初始化 ship 。更根本的是,dynamic_cast<Derived>(baseptr)要求baseptr必须指向直播Base反对或成为nullptr 。例如。如果指针已初始化,但对象随后被删除,则它也不起作用。

关于c++ - Dynamic_cast 使我的程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27810812/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com