每当我调用一个函数时,我都会遇到这个非常恼人的问题:
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()返回指向对象顶点向量的指针,renderToWindow是指向sf :: RenderWindow
的指针我遇到的一个非常奇怪的问题是,我可以调用此函数,它不会从它返回,VC ++打破并指出我:
int __cdecl atexit (
_PVFV func
)
{
return (_onexit((_onexit_t)func) == NULL) ? -1 : 0;
}
我在这里得到了奇怪的行为,我可以在退出之前通过调用Display()函数和系统(“暂停”)来停止这个功能,它会完美地显示所有内容,但更进一步,它会中断。
我将添加我发送动态分配的对象,当我设置常规的一切都很好。这很奇怪,当我调试程序时,多边形和线条具有正确的坐标,一切都正常显示,但它无法从函数返回。
答案 0 :(得分:4)
如果一个函数不会返回声音,就像你之前在某个地方弄乱了堆栈一样 - 这很可能是一个超出范围的写入。
或者可能因为你最终在atexit中可能会有一个未捕获的异常被抛出。
无论哪种方式 - 欢迎来到编程的乐趣 - 现在你必须找到一个可能在你的函数卡住之前很久就会发生的错误
您可以尝试一些工具,如valgrind(如果它可用于Windows)或其他一些边界检查器。