【发布时间】:2017-12-20 16:07:17
【问题描述】:
我有一个简单的程序,它只显示一个窗口,等待按键,然后退出。在关闭期间,应用程序崩溃,并抱怨 CoreMessaging.dll。以下是有问题的示例代码:
sf::RenderWindow window;
void waitForKeyPress() {
Event event;
bool done = false;
while (!done) {
while (window.pollEvent(event)) {
if (event.type == Event::KeyPressed) {
done = true;
}
}
}
}
int main() {
// If I don't create the window, there's no crash.
window.create(VideoMode::getDesktopMode(), "test", Style::Default);
waitForKeyPress();
return 0; // Crashes upon returning.
}
这是我遇到的崩溃:
game.exe 中 0x64260032 (CoreMessaging.dll) 处的未处理异常:0xC0000602:发生快速失败异常。异常处理程序不会被调用,进程将立即终止。
调用堆栈似乎不是特别有用
> CoreMessaging.dll!64260032() Unknown
[Frames below may be incorrect and/or missing, no symbols loaded for CoreMessaging.dll]
[External Code]
InputHost.dll!5bb78a40() Unknown
[External Code]
该项目是使用 Visual Studio Community 2015 构建的。什么是 CoreMessaging.dll,为什么这个仅显示一个窗口并关闭的简单应用会出现问题?
【问题讨论】:
-
我不熟悉
sf::RenderWindow但是为什么window变量是全局的? -
看看this page,你应该试着把你的
waitForKey函数放在while (window.isOpen())里面 -
这是一个全球性的,因为我想把这个问题的一个非常快速的最小示例放在一起。该问题与事件处理或窗口的全局性无关。我可以完全删除它并在 main 范围内声明窗口,但问题仍然存在。在打开窗口后用 window.close() 关闭窗口也不能解决问题。