此代码合法吗?
它崩溃了,我不确定是不是因为我的编程环境(它是一个嵌入式设备),还是因为我编写了狡猾的代码。
int foo(NGKGame * game) {
game->init(); //Crashes here
return 0;
}
int main() {
NGKGame * game = new PlaneGame();
game->init(); //This call is okay
foo(game);
return 0;
}
NGKGame
是基类。 PlaneGame
是来自NGKGame
的派生类。 init()
是基类中的纯虚函数,但是在PlaneGame
中实现。
谢谢,
修改
两次调用的init函数就是示例的一部分。在我目前的实现中,它是空的。
答案 0 :(得分:2)
它可能会崩溃,因为您在同一个对象上调用init()
两次。由于你没有向我们展示init()
的源代码,我无法推测它为什么会崩溃,但似乎只能调用一次名为init
的函数。
如果您想要更好的答案,请参阅http://sscce.org/
答案 1 :(得分:1)
此代码很好 - 假设您可以两次拨打init()
。
init()
中的NGKGame
是PV不是问题。 PV的重点是允许您以foo()
的方式调用它们。
答案 2 :(得分:0)
您的代码段没有任何问题。
虽然您是打算两次致电NGKGame::init
还是仅仅是示例代码的一部分?我的预感是PlaneGame::init
内部的某些内容在再次调用时出现故障,如果是这样的话。
答案 3 :(得分:0)
代码看起来很好。 可能与某些编译器标志有关。我刚才有一个类似的问题。在指针周围徘徊的代码可以在没有优化标志(使用gcc)的情况下正常工作,但在启用-O3(优化)时会崩溃。我没弄清楚如何摆脱它,所以我只是手动添加了各种使用-O3启用的优化标志,它运行正常。