Проблемы с памятью - PullRequest
       4

Проблемы с памятью

1 голос
/ 19 июля 2010

У меня есть какой-то одноэлементный класс (пожалуйста, не говорите об использовании одноэлементного).

class InputSystem : boost::serialization::singleton<InputSystem>
{
private:
   boost::shared_ptr<sf::Window> mInputWindow;
public:
   InputSystem()
   {
      mInputWindow = boost::shared_ptr<sf::Window>( new sf::Window(someARgs) );
      someMethod();
   }

   void someMethod()
   {
      mInputWindow->...() // Calling some methods of sf::Window class
      // Everything  is fine here
   }

   const sf::Input &Handle() const
   {
      return mInputWindow.get()->GetInput();
   }
};

void main()
{
   InputSystem::get_mutable_instance().Handle(); // Here is all members of InputSystem have invalid addresses in memory (0x000)
}

Что не так может быть там?

1 Ответ

3 голосов
/ 19 июля 2010

Здесь все члены InputSystem имеют недопустимые адреса в памяти (0x000)

Либо someMethod() обнуляет данные вашего класса, либо вы неправильно диагностировали проблему.

Измените свою основную функцию следующим образом:

InputSystem& inputSystem = InputSystem::get_mutable_instance();
inputSystem.Handle();

Это помещает создание синглтона и первую попытку использовать его на отдельных строках. Запустите ваш отладчик и пролистайте код, чтобы найти точную точку повреждения данных вашего синглтона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...