我已经解决了这个问题。我正在运行一个名为 RadeonPro 的程序,它是一个显卡管理器工具。当我更换我的显卡时,我忘了更新那个程序。我已经删除了 RadeonPro,现在我的程序正确终止了!
我猜任何有类似问题的人都可以通过删除/更新任何可能使用有问题的库的程序来解决这个问题(对我来说是atioglxx.dll)
我已经有一段时间没有看这个项目了,从那以后我得到了一个新的显卡(我的驱动程序是最新的)。
问题是当我退出程序时,如果我正常启动,它会导致中断(在调试器内)或崩溃。崩溃发生在主函数返回后,并且发生在 crtexe.c 中下面标记的函数调用上。
/*
* Note that if the exe is managed app, we don't really need to
* call exit or _c_exit. .cctor should be able to take care of
* this.
*/
if ( !managedapp )
exit(mainret); //<<< This Line
if (has_cctor == 0)
_cexit();
通过反复试验(注释掉代码块),我将自己代码中的问题范围缩小到:
mRenderWindow->display();
mRenderWindow 是一个SFML RenderWindow,我正在使用 2.0 但考虑更新到 2.1。无论如何,当我删除该行时,程序会正常退出。
我最初提到我的图形的原因是因为当崩溃发生时,我的堆栈跟踪在顶部有这个:
atioglxx.dll!03fc0054()
如果我没记错的话,这是一个与 ATi OpenGL 相关的 dll。
我一直在环顾四周,并在不同的论坛上看到了几个相同问题但没有解决方案的帖子。希望有人可以为我阐明这个问题!