2015-02-11 195 views
0

我正在使用SFML。我正试图在屏幕上写一些文字。每当我关闭应用程序,我得到“堆栈变量”数据“已损坏”的错误,但我没有看到任何代码错误。围绕变量“数据”的堆栈已损坏

#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; 
} 
+0

邮件是否正确显示? – Leo 2015-02-12 16:30:16

+0

是的,信息显示正确。 – mentor93 2015-02-13 14:35:23

+0

不是在main()中填充大量代码,而是重构到完成工作的小工作者函数。现在,您可以将错误本地化,并且在运行之前您不必等到程序退出后再发出警告。 – 2015-02-14 09:21:23

回答

0

改变这一行:

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

要:

if (Keyboard::isKeyPressed(Keyboard::Key::Escape)){ 
    win.close(); 
    break; 
} 
+0

认为它会有所帮助,但事实并非如此。同样的错误。 – mentor93 2015-02-14 23:54:00

相关问题