2014-01-07 6 views
0

Я пытаюсь открыть окно SFML, но каждый раз, когда он запускается, он говорит: «Доступ к считыванию нарушений: 0xCCCCCCC0». Ошибка возникает в методе init(). Соответствующий код:Открытие окна SFML дает ошибку чтения памяти

class AirportGame { 
private: 
    sf::RenderWindow window; 
public: 
    void init(); 
    int run(); 

/

void AirportGame::init() { 
    window.create(sf::VideoMode(800, 600), "SFML window"); 
} 

int AirportGame::run() { 
    init(); 

    while (window.isOpen()) { 
     sf::Event event; 

     while (window.pollEvent(event)) { 
      if (event.type == sf::Event::Closed) { 
       window.close(); 
      } 
     } 
    } 

    return 0; 
} 

int main() { 
    AirportGame* app = new AirportGame(); 
    return app->run(); 
} 

Это происходит через некоторое время после инициализации, поскольку фактическое окно открыто. В отладчике 0xCCCCCC0 нет упоминания.

+0

вы не отладочная включен? почему ты собираешься поместить адрес? – FaddishWorm

+0

их включили, но я говорю, что каждый объект, как представляется, правильно определен, включая окно. – Tips48

+0

yar, его ошибка во время выполнения: P - Должно ли окно быть указателем? – FaddishWorm

ответ

-1

Установите окно на окно RenderWindow *;

и создать его с

window = new sf::RenderWindow(/*your stuff or default initialize*/); 

, а затем вызвать

window->create(/*your settings*/); 

, если вы еще не инициализировать его.

С этого момента только окно доступа, используя '->' вместо '.'

+0

Да, это то, что я получаю. – FaddishWorm

+2

Вы никогда не должны использовать 'new', если нет веских причин. Почему вы думаете, что распределение кучи будет иметь значение для этой проблемы? –

+0

Ну, это то, что я всегда использовал и хорошо работает. Использование нового - это не проблема, если вы используете удаление, когда закончите. –

2

Исправлено!

Оказывается, под С ++ препроцессор я поставил определение SFML_STATIC вместо SFML_DYNAMIC

Смежные вопросы