记忆问题

时间:2010-07-19 08:06:00

标签: c++ pointers

我有一些单身人士课程(请不要谈论单身人士的使用)。

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 个答案:

答案 0 :(得分:3)

  

以下是InputSystem的所有成员在内存中都有无效地址(0x000

someMethod()将您的班级数据归零,或者您误诊了该问题。

将您的主要功能更改为:

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

这将创建单例并首次尝试将其用于单独的行。启动调试器并逐步查看代码,查找单例数据损坏的确切位置。