gpt4 book ai didi

c++ - 函数没有导致错误,但它不会返回到程序

转载 作者:行者123 更新时间:2023-11-30 02:06:20 25 4
gpt4 key购买 nike

每当我调用函数时,我都会遇到这个非常烦人的问题:

void renderGame::renderMovingBlock(movingBlock* blockToRender){
sf::Shape blockPolygon;
sf::Shape blockLine = sf::Shape::Line(blockToRender->getLineBegin().x,blockToRender->getLineBegin().y,blockToRender->getLineEnd().x,blockToRender->getLineEnd().y, 3.f,movingBlockLineColor);

for(auto i = blockToRender->getVertexArray()->begin(); i!=blockToRender->getVertexArray()->end(); ++i){
blockPolygon.AddPoint(i->x, i->y, movingBlockBlockColor);
}

renderToWindow->Draw(blockLine);
renderToWindow->Draw(blockPolygon);
}

这是一个简单的函数,它接受一个指向对象的指针并使用 SFML 将其呈现在屏幕上。这是一个在轨道上移动的简单多边形。

getVertexArray() 返回指向对象顶点 vector 的指针,renderToWindow 是指向 sf::RenderWindow 的指针

我有一个非常奇怪的问题是我可以调用这个函数它不会从它返回,VC++ 中断并指向我:

int __cdecl atexit (
_PVFV func
)
{
return (_onexit((_onexit_t)func) == NULL) ? -1 : 0;
}

我在这里出现了奇怪的行为,我可以在退出前通过调用 Display() 函数和 system("pause") 停止这个函数,它会完美地显示所有内容,但再向前一步就会中断。

我要补充一点,我正在发送一个动态分配的对象,当我设置一个常规对象时,一切都很好。很奇怪,当我调试程序时,多边形和线的坐标正确,一切都正确显示,但它就是无法从函数返回。

最佳答案

如果一个函数不会返回听起来像你之前在某处弄乱了堆栈 - 这很可能是越界写入。

或者可能是因为您最终进入了 atexit,所以可能抛出了未捕获的异常。

无论哪种方式 - 欢迎享受编程的乐趣 - 现在你必须找到一个可能在你的函数卡住之前很久就发生的错误

您可以尝试一些工具,例如 valgrind(如果适用于 Windows)或其他一些边界检查器。

关于c++ - 函数没有导致错误,但它不会返回到程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8875004/

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