C++ 围绕变量';数据';腐败

C++ 围绕变量';数据';腐败,c++,text,fonts,stack,sfml,C++,Text,Fonts,Stack,Sfml,我正在使用SFML。我想在屏幕上写些文字。每当我关闭应用程序时,都会出现“Stack-around-variable'data'was corrupted”错误,但我看不出代码有任何错误 #include <SFML\Graphics.hpp> using namespace sf; int main() { RenderWindow win(VideoMode(640, 480), "", Style::None); Font lucida; luci

我正在使用SFML。我想在屏幕上写些文字。每当我关闭应用程序时,都会出现“Stack-around-variable'data'was corrupted”错误,但我看不出代码有任何错误

#include <SFML\Graphics.hpp>

using namespace sf;

int main() {
    RenderWindow win(VideoMode(640, 480), "", Style::None);

    Font lucida;
    lucida.loadFromFile("lucon.ttf");
    Text data;
    data.setCharacterSize(12);
    data.setColor(Color(180, 180, 180));
    data.setFont(lucida);
    data.setPosition(Vector2f(10, 10));
    data.setStyle(Text::Bold);
    data.setString("test");

    Event evt;

    double dt = 0.f;
    Clock clock;
    double dwticks = clock.getElapsedTime().asSeconds();
    double dwnewticks = 0.f;

    while (win.isOpen()) {
        if (win.pollEvent(evt)) {
            if (Keyboard::isKeyPressed(Keyboard::Key::Escape)) win.close();
        }
        else {
            dwnewticks = clock.getElapsedTime().asSeconds();
            dt = dwnewticks > dwticks ? (dwnewticks - dwticks) / 4000.f : 0.f;
            dwticks = dwnewticks;

            win.clear(Color(0, 0, 0));
            win.draw(data);
            win.display();
        }
    }

    return 0;
}
#包括
使用名称空间sf;
int main(){
RenderWindowWin(视频模式(640480),“”,样式::无);
卢西达字体;
loadFromFile(“lucon.ttf”);
文本数据;
data.setCharacterSize(12);
setColor(Color(180180180));
data.setFont(lucida);
数据设置位置(矢量2F(10,10));
data.setStyle(文本::粗体);
数据。设置管柱(“测试”);
事件evt;
双dt=0.f;
时钟;
double dwticks=clock.getElapsedTime().asSeconds();
双dwnewticks=0.f;
while(win.isOpen()){
if(赢选事件(evt)){
如果(键盘::isKeyPressed(键盘::键::Escape))win.close();
}
否则{
dwnewticks=clock.getElapsedTime().asSeconds();
dt=dwnewticks>dwticks?(dwnewticks-dwticks)/4000.f:0.f;
dwticks=dwnewticks;
win.clear(颜色(0,0,0));
赢取(数据);
win.display();
}
}
返回0;
}
更改此行:

if (Keyboard::isKeyPressed(Keyboard::Key::Escape)) win.close();
致:


消息显示正确吗?是的,消息显示正确。与其在main()中填充大量代码,不如重构到完成任务的小辅助函数。现在,您可以定位错误,幸运的是,您不必等到程序退出后才得到警告。
if (Keyboard::isKeyPressed(Keyboard::Key::Escape)){
   win.close();
   break;
}